登录拦截器: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); } } }