SpringMVC 拦截器实现

来源:互联网 发布:mac自带远程桌面连接 编辑:程序博客网 时间:2024/05/20 16:12

写拦截器的事例出现了一个错误,找了很久,解决了问题就决定放上来。

首先是一个userController

package org.fkit.controller;import javax.servlet.http.HttpSession;import org.fkit.user.User3;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controller public class User3Controller {@RequestMapping (value="/login")public ModelAndView login(String loginname,String password,ModelAndView mv,HttpSession session){if(loginname!=null&&loginname.equals("tyf")&&password!=null&&password.equals("123")){User3 user=new User3();user.setLoginname(loginname);user.setPassword(password);user.setUsername("管理员");session.setAttribute("user", user);mv.setViewName("redirect:main");}else{mv.addObject("message", "登录名密码错误");mv.setViewName("loginForm");}return mv;}}
登录页面loginForm.jsp

<form action="login" method="post">    <font color="red">${requestScope.message}</font><br>    登录名:<input type="text" name="loginname"><br>    密码:<input type="password" name="password"><br>    <input type="submit" value="登录">    </form>
再是跳转到main action的控制器BookController

package org.fkit.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;@Controller public class BookController {@RequestMapping (value="/main")public String main(Model model){return "main";}}
关键的地方来了就是我们的拦截器部分

package org.fkit.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.fkit.user.User3;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class AuthorInterceptor implements HandlerInterceptor{private static final String [] IGNORE={"/loginForm","/login"};@Overridepublic void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {System.out.println("AuthorInterceptor afterCompletion执行了");}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2, ModelAndView arg3) throws Exception {System.out.println("AuthorInterceptor postHandler执行了");}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handle) throws Exception {System.out.println("AutuorInterceprtor preHandle执行开始");boolean flag=false;String servletPath=request.getServletPath();for(String s:IGNORE)if(servletPath.contains(s)){flag=true;break;}if(!flag){User3 user=(User3)request.getSession().getAttribute("user");if(user==null){System.out.println("AuthorInteceptor拦截请求:");request.setAttribute("message","请先登录再访问");request.getRequestDispatcher("/WEB-INF/content/loginForm.jsp").forward(request, response);}else{System.out.println("放行请求");flag=true;}}return flag;}}

我出现的错误正是
request.getRequestDispatcher("/WEB-INF/content/loginForm.jsp").forward(request, response);

一开始只写了loginForm,浏览器解析不出,报了404,我是根据书本写的,不知道为什么会出这种错误。

springMVC的配置文件

<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><bean class="org.fkit.interceptor.AuthorInterceptor"/></mvc:interceptor></mvc:interceptors>


main.jsp是获取登录权限之后可以进去的页面,如果我们没有登录就直接访问main会遭到拦截器的拦截,这正是拦截器的作用所在。


只有输入正确的账号密码才能看到main.jsp

原创粉丝点击