單點登錄/數字證書

單點登錄(sso)定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。


1、首先引入jar包

在我的項目中build.gradle文件中ccompile加上

'org.apache.shiro:shiro-cas:' + shiroVersion


2、在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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章