1、首先引入jar包
在我的項目中build.gradle文件中ccompile加上
'org.apache.shiro:shiro-cas:' + shiroVersion2、在AppConfig文件中
@Bean
public Realm realm() {
PpsRealm realm = new PpsRealm();
realm.setCredentialsMatcher(new HashedCredentialsMatcher("MD5"));
return realm;
}
/**
* 單點登錄
* cas驗證的結果處理
* @return
*/
@Bean
public Realm casrealm() {
CASRealm realm = new CASRealm();
realm.setCasServerUrlPrefix("http://10.35.252.77:9080/cas");
realm.setCasService("http://localhost:8080/vis-screen/pointlogin");
return realm;
}
/**
* 單點登錄
* cas驗證的攔截器
* @return
*/
@Bean
public CasFilter casFilter() {
CasFilter cas = new CasFilter();
cas.setFailureUrl("/err");
return cas;
}
並在shiroFilter()方法中指定單點登錄的filter
Map<String, Filter> filters = new HashMap<String, Filter>();
filters.put("CASFilter", casFilter());
3、在security文件夾
加上CASFilter(內容爲空),CASRealm類
大致代碼如下:public class CASRealm extends CasRealm {
@Autowired
private AccountService accountService;
@Override
protected AuthorizationInfo doGetAuthorizationInfo
(PrincipalCollection principalCollection) {
String uname = (String)principalCollection.getPrimaryPrincipal();
User user = accountService.findByNum(uname);
if (null == user) {
return null;
} else {
SimpleAuthorizationInfo result = new SimpleAuthorizationInfo();
String roleName = accountService.getRoleName(user);
result.addRole(roleName);
if (user.getBigScreen() != 0) {
result.addStringPermission("screen");
}
return result;
}
}
}
其中有個findByNum的方法,注意在sql,dao,service中添加.
4、在auth.properties中加上/pointlogin = CASFilter
5、在login.jsp的同級處加上pointlogin.jsp便於後臺跳轉<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
//從單點登錄中拿到警號
String code = request.getRemoteUser();
%>
<body>
<%=code %>
</body>
6、千萬不能忘記在數據庫中建立表 ,字段爲NUM,LOGINID