Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Shiro中的不同形式登录_Java_Security_Shiro - Fatal编程技术网

Java Shiro中的不同形式登录

Java Shiro中的不同形式登录,java,security,shiro,Java,Security,Shiro,在“Shiro中的多个登录url”下询问的问题相同,但没有回答 我正在尝试为ApacheShiro创建两个不同的日志页面 1) 适用于移动设备(小屏幕、有限javascript和不同主题) 2) 用于标准设备 我该怎么办 现在一次只有一个url在工作 shiro.loginUrl= 谢谢您需要扩展FormAuthenticationFilter以了解多个登录URL。它可以是这样的: public class CustomAuthenticationFilter extends FormAuthe

在“Shiro中的多个登录url”下询问的问题相同,但没有回答

我正在尝试为ApacheShiro创建两个不同的日志页面 1) 适用于移动设备(小屏幕、有限javascript和不同主题) 2) 用于标准设备

我该怎么办

现在一次只有一个url在工作

shiro.loginUrl=


谢谢

您需要扩展
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
    }
}
公共类CustomAuthenticationFilter扩展了AuthenticationFilter{
私有映射loginUrblBySerAgent=newHashMap();
公共无效setLoginUrls(最终地图LoginUrlBySerAgent){
this.loginurlbyseragent=loginurlbyseragent;
}
受保护的void redirectToLogin(最终ServletRequest请求,最终ServletResponse响应)引发IOException{
最终字符串loginUrl=getLoginUrl(请求);
WebUtils.issueRedirect(请求、响应、逻辑);
}
私有字符串getLoginUrl(最终ServletRequest请求){
//检查用户代理
最终字符串userAgent=getUserAgent(请求);
//并返回相应的登录url
return userAgent!=null&&loginUrlByUserAgent.containsKey(userAgent)?
LoginUrlBySerAgent.get(用户代理):
getLoginUrl();
}
私有字符串getUserAgent(最终ServletRequest请求){
//获取“用户代理”标题
}
}
然后,您只需要将authc过滤器替换为新创建的过滤器