多项目集成单点登陆配置java
当sso验证完成以后,客户端系统须要接收sso系统返回的结果时,须要定义一个过滤器获取返回结果,而后针对返回结果作相关处理.若是不须要作处理时,此处Filter也能够不用定义.web
package com.common.web.filter; import java.io.IOException; import java.util.Date; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jasig.cas.client.util.AssertionHolder; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.common.base.pbi.CommonConstants; import com.common.base.util.DateUtil; import com.common.base.util.IDUtil; import com.common.base.util.IPUtil; import com.common.base.util.UserUtil; import com.common.core.busi.historylogin.manager.HistoryLoginManager; import com.common.core.busi.login.manager.LoginManager; import com.common.entity.common.AbstractEntity; import com.common.entity.historylogin.HistoryLoginEntity; import com.common.entity.user.UserEntity; /**
当成功登陆SSO系统时将会返回登陆的userid根据此userid创建session会话;spring
@ClassName: SessionFilter * @Description: TODO(这里用一句话描述这个类的做用) *@authorjeesz *@date2015-10-01 * */ public class SSO4InvokeContextFilter implements Filter{ private final static Log log = LogFactory.getLog(SSO4InvokeContextFilter.class); private WebApplicationContext applicationContext; public SSO4InvokeContextFilter() { super(); }
过滤器注销时,触发此方法;apache
*/session
public void destroy() {app
//暂时不作任何处理;ide
}this
/**.net
* 根据用户id获取用户信息而且把用户信息放入session会话中;debug
*@Title: doFilter
* @Description: TODO(这里用一句话描述这个方法的做用)
* @Params
* @throws
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response = (HttpServletResponse)res; HttpSession session = request.getSession(); //从session中获取登录用户; Object userObject = session.getAttribute(CommonConstants.USER_INFO_SESSION); if(userObject == null){ //获取用户名; String userName = AssertionHolder.getAssertion().getPrincipal().getName(); LoginManager loginManager = applicationContext.getBean(LoginManager.class); UserEntity userEntity = loginManager.loginByUserName(userName); session.setAttribute(CommonConstants.USER_INFO_SESSION,userEntity); session.setAttribute(CommonConstants.IS_SYSTEM_ADMIN,userEntity.getUserType()==1?true:false); UserUtil.setLoginUserInfo(userEntity); //根据用户名查询出用户信息,并放入session中; log.info("UserName:["+userName +"]登录成功,客户端IP地址为["+IPUtil.getIpAddr(request)+"],登录时间为["+DateUtil.dateToString(new Date())+"]"); //添加登陆记录; HistoryLoginEntity historyLoginEntity = new HistoryLoginEntity(); historyLoginEntity.setUserId(userName); historyLoginEntity.setHid(IDUtil.generateId()); historyLoginEntity.setLoginCount("1"); setCommonValue(request,historyLoginEntity); boolean hlBol = applicationContext.getBean(HistoryLoginManager.class).addLoginRecord(historyLoginEntity); log.debug("登陆历史记录["+(hlBol?"成功":"失败")+"]."); } chain.doFilter(request, response); } /** * 设置公共属性; * @Title: setCommonValue * @Description: TODO(这里用一句话描述这个方法的做用) * @throws */ private void setCommonValue(HttpServletRequest request,AbstractEntity entity){ if(request != null){ //获取当前对象; UserEntity userEntity = (UserEntity) request.getSession().getAttribute(CommonConstants.USER_INFO_SESSION); if(entity !=null){ String currUser = userEntity.getUserId(); //设置建立人、建立日期、修改人、修改时间 entity.setCreatedBy(currUser); entity.setModifiedBy(currUser); entity.setCreationDate(DateUtil.getNowDate()); entity.setModifiedDate(DateUtil.getNowDate()); } } } /** * 初始化Spring上下文; */ @Override public void init(FilterConfig filterConfig) throws ServletException { WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(filterConfig.getServletContext()); this.applicationContext = applicationContext; } }