1

「Shiro の複数ログイン URL」で同じ質問をしましたが、回答がありませんでした。

Apache shiro 用に 2 つの異なるログイン ページを用意しようとしています。1) モバイル デバイス用 (小さな画面、限定された JavaScript の異なるテーマ) 2) 標準デバイス用

どのようにできるのか?

現在、一度に機能する URL は 1 つだけです。

shiro.loginUrl = ...

ありがとうございました

4

1 に答える 1

2

FormAuthenticationFilter複数のログイン URL を認識できるように拡張する必要があります。次のようになります。

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 フィルターを新しく作成したものに置き換えるだけです。

于 2013-04-02T08:11:34.027 に答える