Shiro自定義密碼匹配認證


項目集成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調用




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM