cas shrio 不同系统单点登陆

不同系统使用不同的登陆名和账号,在做cas中心验证 使用数据库验证就比较纠结,因为登录名和密码两边不一样,后来请教大神,两个系统使用相同的登录名,密码可以不一样,然后在cas的
验证db 设置两个系统的数据源只要一个验证通过就把用户信息放到seession,完成登陆。

参考:https://github.com/coder-huang/sso-shiro-cas

deployerConfigContext.xml





class="com.distinct.cas.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:passwordEncoder-ref="passwordEncoder"
p:sql="select usr_pwd from users where Usr_LoginID=?" />



class="com.distinct.cas.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource1"
p:passwordEncoder-ref="passwordEncoder"
p:sql="select usr_pwd from users where Usr_LoginID=? " />





















UserRealm.java

/**
* 1、CAS认证 ,验证用户身份,培训系统 和 hr 系统采用相同的登录名,进行关联
* 2、将用户基本信息设置到会话中
*/
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {

AuthenticationInfo authc = super.doGetAuthenticationInfo(token);
String account = (String) authc.getPrincipals().getPrimaryPrincipal();

User user = this.loginDao.getUser(account);
if(user!=null){
List userResources=this.loginDao.getAllMenusByUser(user);
SecurityUtils.getSubject().getSession().setAttribute(Constants.USER_RESOURCE, userResources);
}
SecurityUtils.getSubject().getSession().setAttribute(Constants.SESSION_USER, user);

return authc;
}

你可能感兴趣的:(cas)