1

在“Shiro 中的多个登录 url”下提出了同样的问题,但没有得到回答。

我正在尝试为 apache shiro 提供两个不同的登录页面 1)对于移动设备(小屏幕,有限的 javascript 不同主题)2)对于标准设备

我能怎么做?

现在一次只有一个 url 有效。

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 回答