2013-03-23 40 views
1

同一問題在「Shiro中的多個登錄網址」下被問到,但未回答。Shiro中的不同登錄形式

我想有阿帕奇四郎 1)爲移動設備(小屏幕兩個不同的洛頁面,限制JavaScript的不同主題) 2)對於標準設備

我該怎麼辦?

現在每次只有一個網址正在工作。

shiro.loginUrl = ...

三江源

回答

2

您需要延長FormAuthenticationFilter要注意多次登錄網址。它可以看起來像這樣:

public class CustomAuthenticationFilter extends FormAuthenticationFilter { 
    private Map<String, String> loginUrlByUserAgent = new HashMap<String, String>(); 

    public void setLoginUrls(final Map<String, String> loginUrlByUserAgent) { 
     this.loginUrlByUserAgent = loginUrlByUserAgent; 
    } 

    protected void redirectToLogin(final ServletRequest request, final ServletResponse response) throws IOException { 
     final String loginUrl = getLoginUrl(request); 
     WebUtils.issueRedirect(request, response, loginUrl); 
    } 

    private String getLoginUrl(final ServletRequest request) { 
     // check user agent 
     final String userAgent = getUserAgent(request); 
     // and return appropriate login url 
     return userAgent != null && loginUrlByUserAgent.containsKey(userAgent) ? 
       loginUrlByUserAgent.get(userAgent) : 
       getLoginUrl(); 
    } 

    private String getUserAgent(final ServletRequest request) { 
     // get "User-Agent" header 
    } 
} 

然後,你只需要用你新創建的authc過濾器。