Spring MVC中的拦截器

来源:互联网 发布:免费cc域名申请不了? 编辑:程序博客网 时间:2024/06/06 01:38

I.实现HandlerInterceptor接口

// 在请求处理的方法之前执行// 返回true执行下一个拦截器,返回false不继续执行@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {boolean isUser = true;System.out.println("-------处理前-------");// 使用HttpServletRequest和HttpServletResponse实现拦截跳转if (!isUser) {// response.sendRedirect(request.getContextPath() + "/Index.jsp");RequestDispatcher rd = request.getRequestDispatcher("/Index.jsp");rd.forward(request, response);}return isUser;}

II.配置拦截器

注意拦截器路径的配置
<!-- 配置拦截器 -->      <mvc:interceptors>    <mvc:interceptor>    <!-- /**表示包括路径及其子路径      比如/admin/*表示/admin/add,/admin/list但不包括/admin/user/add     而/adimn/**则包括/admin/user/add    -->    <mvc:mapping path="/**"/>    <!-- 对应的拦截器 -->    <bean class="com.duxd.interceptor.MyInterceptor"></bean>    </mvc:interceptor>    </mvc:interceptors>
需要注意的是这里加入了

III.登录拦截

mvc.xml
<!-- 配置拦截器 -->      <mvc:interceptors>    <mvc:interceptor>    <!-- /**表示包括路径及其子路径      比如/admin/*表示/admin/add,/admin/list但不包括/admin/user/add     而/adimn/**则包括/admin/user/add    -->    <mvc:mapping path="/**"/>    <!-- 对应的拦截器 -->    <bean class="com.duxd.interceptor.LoginInterceptor">    <property name="allowedPass">    <list>    <value>Login.do</value>    </list>    </property>    </bean>    </mvc:interceptor>    </mvc:interceptors>
LoginInterceptor
// 找出哪些url不被拦截,哪些需要被拦截private List<String> allowedPass;// 要加入getter和setter方法,否则报错public List<String> getAllowedPass() {return allowedPass;}public void setAllowedPass(List<String> allowedPass) {this.allowedPass = allowedPass;}@Overridepublic boolean preHandle(HttpServletRequest req, HttpServletResponse resp,Object handler) throws Exception {String url = req.getRequestURL().toString();String temp;System.out.println(url);// 输出了Login.do,是在mvc.xml里配置Interceptor时设置的value值,这里如果输入的url后缀为Login.do就返回true,否则返回false。for(int i = 0; i < allowedPass.size(); i++) {System.out.println(allowedPass.get(i));}Object user = req.getSession().getAttribute("user");if(user != null) {return true;}//for(String temp:allowedPass) {//if(url.endsWith(temp)) {//return true;//}//}for(int i = 0; i < allowedPass.size(); i++) {temp = allowedPass.get(i);if(url.endsWith(temp)) {return true;}}resp.sendRedirect(req.getContextPath() + "/Login.jsp");return false;}
UserController
@Controllerpublic class UserController {@RequestMapping("/Login")public String Login(User user, HttpSession session) {System.out.println(user.getName() + "," + user.getPassword() + ";");if(user.getName().equals("duxd") && user.getPassword().equals("123456")){session.setAttribute("user", user);return "redirect:/Index.jsp";}return "redirect:/Login.jsp";}// 这个由于不在allowedPass中,会被拦截器拦截,重定向到Login界面@RequestMapping("/Add")public String add() {System.out.println("add");return "redirect:/Login.jsp";}
原创粉丝点击