Вход в другую форму в Широ

Тот же вопрос, который был задан в разделе «URL-адрес нескольких входов в Широ», но остался без ответа.

Я пытаюсь создать две разные страницы входа для apache shiro 1) Для мобильных устройств (маленький экран, ограниченная тема javascript) 2) Для стандартных устройств

Как я могу сделать?

Теперь работает только один URL.

широ.loginUrl = ...

Спасибо


person Med-Salah OKA    schedule 23.03.2013    source источник


Ответы (1)


Вам нужно расширить 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 на только что созданный.

person sody    schedule 02.04.2013