登录拦截器:ShiroInterceptorFilter 。继承于 FormAuthenticationFilter
获取被拦截之前的请求路径:
WebUtils.getSavedRequest(request);
String url = savedRequest.getRequestUrl();
public class ShiroInterceptorFilter extends FormAuthenticationFilter
{
//默认PC端的登录请求
private String loginUrl;
//用来存放需要拦截的请求路径
static List<String> interceptorUrlList = new ArrayList<>();
//静态代码块,加载需要拦截的请求路径【本例中存放的是移动端的请求路径】
static{
interceptorUrlList.add("/manage/index");
interceptorUrlList.add("/system");
......
}
//拦截器的构造方法
public ShiroInterceptorFilter() {
}
public ShiroInterceptorFilter(String loginUrl) {
this.loginUrl = loginUrl;
}
//参数的get/set方法
@Override
public String getLoginUrl() {
return loginUrl;
}
@Override
public void setLoginUrl(String loginUrl) {
this.loginUrl = loginUrl;
}
//重写的跳转到登录页面的方法
@Override
protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException {
//从请求头中获取当前的请求路径
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String url = httpServletRequest.getServletPath();
//用来判断是否需要被拦截的标识,默认不需要被拦截
Boolean flag = false;
//判断当前的请求是否是移动端的路径
for (String mobileUrl : interceptorUrlList) {
if(url.contains(mobileUrl)){
flag = true;
}
}
//根据拦截的请求,跳转不同的登录请求路径
if(flag){
//移动端接口,拦截跳转移动端登录
WebUtils.issueRedirect(request, response, "/ddLogin");
}else{
//PC端,跳转PC端登录
WebUtils.issueRedirect(request, response, loginUrl);
}
}
}
博客介绍了Java中的登录拦截器ShiroInterceptorFilter,它继承于FormAuthenticationFilter,还说明了获取被拦截之前请求路径的方法,即通过WebUtils.getSavedRequest(request)获取请求,再从savedRequest中得到请求路径。
&spm=1001.2101.3001.5002&articleId=131696175&d=1&t=3&u=51bfcdfb490e4010ab000dbb350619d1)
1454

被折叠的 条评论
为什么被折叠?



