怎么给登录功能设一个访问拦截器
1 <mvc:interceptors> 2 <mvc:interceptor> 3 <mvc:mapping path="/my/cbs/**"/> 4 <mvc:mapping path="/member/**"/> 5 ....... 6 <bean id="loginInterceptor" class="com.jinqiandun.cloud.cp.utility.LoginInterceptor"/> 7 </mvc:interceptor> 8 </mvc:interceptors>
上面是在springmvc的配置文件中配置的信息。path是requestMapping的请求路径,凡是这个路径下的都会被拦截,这里的path后面的*号是代表这个路径下的所有请求。下面是java代码。
1 /** 2 * 登录拦截类 3 * @author Ter 4 * 5 */ 6 public class LoginInterceptor extends HandlerInterceptorAdapter { 7 @Override 8 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 9 String nickName =CookieUtils.getNickName(request); 10 if (nickName != null) { 11 return true; 12 }else { 13 response.sendRedirect("/cp-web/login"); 14 return false; 15 } 16 } 17 18 @Override 19 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 20 super.postHandle(request, response, handler, modelAndView); 21 } 22 }
在spring-mvc.xml文件中配置的路径被访问,都会触发这个LoginInterceptor的preHandle的方法,然后我们就可以在这个类中随便做一个判断和页面跳转,比如这里的话,我如果登录了就会保存cookie文件,从cookie中获取用户信息,如果cookie中没有任何用户信息,那么就定向跳转到登录界面,实现拦截类的功能。
还有人会这样写,在springmvc的配置文件中,path会写“/**”,这样的话,所有的请求路径,他都会被拦截,接着就执行这个拦截类的方法,在这个方法中,会new一个String数组,里面存放着一些请求路径。比如String[] str={“/login”,"/register",............等},通过request获取到当前页面请求的url,通过遍历str数组,和url判断这个url是否包含(java的contains()方法),如果包含了,则return true,如果没有包含,则定向到登录界面且return false。
上述两种方法各有特点。