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