項目集成shiro的時候,有寫某個自定義類然后繼承自AuthorizingRealm
並且重寫實現了他的2個方法:
1、其中一個:認證回調 驗證賬戶密碼的
doGetAuthenticationInfo
2、另外一個:授權查詢 驗證權限的
doGetAuthorizationInfo
ok,上面沒什么用,只是講述一下,正真用到的是下面的代碼
/** * 認證密碼匹配調用方法 * @param authcToken * @param info * @throws AuthenticationException */ @Override protected void assertCredentialsMatch(AuthenticationToken authcToken, AuthenticationInfo info) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authcToken; // 這里可以判斷某個條件若單點登錄,則使用單點登錄授權方法;也可以符合某條件直接return返回跳過 if (!token.getUsername().equals("thinkgem")) { Map<String,Object> map = Maps.newConcurrentMap(); map.put("name",token.getUsername()); map.put("pwd",String.valueOf(token.getPassword())); // 調用sso連接認證 String result = HttpClientUtils.doGet(Global.getConfig("ssoLoginUrl"), map); if (result.equals("true")){ return; } } // 否則還是繼續匹配(兜底方案) super.assertCredentialsMatch(token, info); }
其實也就重寫了AuthorizingRealm類的assertCredentialsMatch方法,判斷符合某個條件參數時直接返回或者使用別的渠道認證;
例子中是登錄名如果不為thinkgem則使用特定的SSO調用