怎么给登录功能设一个访问拦截器

 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。

上述两种方法各有特点。

posted @ 2017-11-10 23:45  李特Ter  阅读(2228)  评论(0编辑  收藏  举报