实现单点登录

单点登陆实现如下:
项目中的web.xml 配置,有可能是使用的前后端分离的项目,含有多个web.xml找到登录的user下进行添加:

<listener>
    <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener
    </listener-class>
</listener>
<!-- 该过滤器用于实现单点退出功能,可选配置 -->
<filter>
    <filter-name>CasSingleSignOutFilter</filter-name>
    <filter-class>org.jasig.cas.client.session.SingleSignOutFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>CasSingleSignOutFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责用户的认证工作,必须启用它 -->
<filter>
    <filter-name>CASFilter</filter-name>
    <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter
    </filter-class>
    <!-- cas服务器登录地址 -->
    <init-param>
        <param-name>casServerLoginUrl</param-name>
        <param-value>http://IP:9080/cas/login</param-value>//认证的cas地址
    </init-param>
    <init-param>
        <description>不拦截的请求</description>
        <param-name>ignorePattern</param-name>
        <param-value>/js/|/images/|/view/|/css/|/sys/login/doLoginAdmin</param-value>
    </init-param>
    <!-- 配置当前web应用所在的服务器域名URL -->
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://localhost:8088/sys/login/doLoginAdmin</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CASFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>
    <filter-name>CASTicketValidator</filter-name>
    <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
    </filter-class>
    <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>http://localhost:9080/cas</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://ip:8088</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CASTicketValidator</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()
    方法获得SSO登录用户的登录名,可选配置。 -->
<filter>
    <filter-name>CASRequestWrapperFilter</filter-name>
    <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>CASRequestWrapperFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如
    AssertionHolder.getAssertion().getPrincipal().getName()。 -->
<filter>
    <filter-name>CASAssertionThreadLocalFilter</filter-name>
    <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>CASAssertionThreadLocalFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 单点登录配置 结束 -->

文件配置已经完了 。下面试后台开发:
单点登陆用户密码控制:
/**
* 登录
* @param staffId 工号
* @param password 密码
* @param multiTenant MyCat 多租户
* @param resp http 响应
* @return 返回登录成功字符串
* @author fishcat
* @date 2018/6/25 上午11:10
*/
@RequestMapping(value = “/doLogin”)
public void doLoginAdmin(String staffId,HttpServletRequest request, String password, String multiTenant, HttpServletResponse resp,HttpServletResponse response) throws Exception{
ModelAndView mv = new ModelAndView();

##获取登录时跳转到门户的user用户名:
staffId=request.getRemoteUser();
JSONObject json = new JSONObject();
if (staffId!=null){
MultiTenantUtil.setMultiTenant(multiTenant);
// 验证用户账号与密码是否正确
User user = loginService.querySingleUser(staffId);
if (user == null || UserStateEnum.INVALID.getValue().equals(user.getIsValid())) {
AppException.create(40005);
}
// 获取员工信息
StaffInfo staffInfo = staffInfoService.getStaffinfoByStaffId(staffId);
Org org = null;
if (null != staffInfo) {
if (StaffInfoEnum.DEPARTURE.getValue().equals(staffInfo.getStatus())) {
// 您已离职,无法登录系统
AppException.create(40008);
}
// 更新用户所属员工信息
user.setStaffinfo(staffInfo);
// 更新用户所属部门信息
org = orgService.searchOrgById(staffInfo.getDepaId());
staffInfo.setOrg(org);
}
try {
// 构建token信息
String token = TokenProcessor.getInstance().generateToken(“AbCF”, true);
// 写入cookie
addCookie(resp, “staffId”, user.getUserId(), null, “/”);
addCookie(resp, “staffName”, URLEncoder.encode(user.getStaffName(), “UTF-8”), null, “/”);
// addCookie(resp, “token”, token, null, “/”);
// 会话写入缓存
saveSessionToCache(user, multiTenant, token);
// 初始化角色和资源
loginService.initRoleAndResources(user.getRowId(), user.getUserId());
// 组装返回信息
json.put(“success”, true);
json.put(“token”, token);
json.put(“staffId”, user.getUserId());
json.put(“staffName”, user.getStaffName());
json.put(“companyId”, user.getCompanyId());
json.put(“orgId”, org == null ? 0L : org.getRowId());
json.put(“isOrgManager”, staffInfo != null && staffInfo.isOrgManager());
json.put(“userInfo”, user);
json.put(“staffInfo”, staffInfo);
json.put(“managerStaffId”, staffInfo != null ? staffInfo.getOrgManagerStaffId() : null);
addCookie(resp, “loginedStaffInfo”, json.toJSONString(), null, “/”);
} catch (Exception e) {
logger.error(“登录失败:”, e);
AppException.create(40007);
}
//跳转至开发页面
//这里只的是我们的开发界面,welcome
response.sendRedirect(“http://localhost/index.html#/myCenter”);
}else{
mv.setViewName(“login”);
}

退出同理 , response.sendRedirect(“http://localhost/login.jsp”);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值