SpringMVC(四)—拦截器
来源:互联网 发布:led灯编辑软件 编辑:程序博客网 时间:2024/06/14 01:11
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>ssm0523</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- springmvc前端控制器 --> <servlet> <servlet-name>springMvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 在tomcat启动的时候就加载这个servlet --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping><servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern></servlet-mapping><servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern></servlet-mapping><servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern></servlet-mapping><servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern></servlet-mapping><servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern></servlet-mapping> <!-- 配置Post请求乱码 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>
springmvc.xml
在springmvc.xml中需要配置拦截器。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 配置自动扫描的包 --> <context:component-scan base-package="com.mq"></context:component-scan> <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name = "prefix" value="/"></property> <property name = "suffix" value = ".jsp"></property> </bean> <!--如果有多个拦截器,则按顺序执行 --> <mvc:interceptors> <mvc:interceptor> <!--表示要拦截的路径,在这里只拦截 /haha/helloworld.action这个请求 --> <mvc:mapping path="/haha/helloworld.action"/> <bean class="com.mq.service.MyInterceptor1"></bean> </mvc:interceptor> </mvc:interceptors> </beans>
拦截器的定义
public class MyInterceptor1 implements HandlerInterceptor { /**在处理请求之前调用。该方法的返回值是boolean类型,若返回值为true, * 则继续调用后面的拦截器和目标方法,若返回为false,则不会调用后面的拦截器和目标方法,表示请求结束 * 这里可以加入登录校验、权限拦截等*/ @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println("MyInterceptor1--"+"preHandle"); return true; } /** * 调用了Controller中定义的方法之后,但在DispatcherServlet 处理视图返回渲染结果之前被调用。 * 这里可在返回用户前对模型数据进行加工处理 */ @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println("MyInterceptor1--"+"postHandle"); } /** * 渲染视图之后调用,可以在这里释放资源。 * 这里可得到执行controller时的异常信息。 */ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("MyInterceptor1--"+"afterCompletion"); }}
自定义拦截器需要实现HandlerInterceptor 接口,重写三个方法。并且在springmvc.xml中进行配置。
拦截器执行时,先执行preHandle(…)方法,再执行postHandle(…)方法,最后执行afterCompletion(…)方法。
preHandle(…)只有返回true的时候,才会调用后面的拦截器和方法。如果返回false,表示请求结束。
定义多个拦截器方法的执行顺序
拦截器的执行顺序和配置文件中的定义的先后顺序有关。
preHandle按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用
postHandler在拦截器链内所有拦截器返成功调用
afterCompletion只有preHandle返回true才调用
拦截器应用
登陆校验:当用户访问服务器的资源时,先判断用户是否已经登陆。如果已经登陆,那么放行,可以访问。如果没有登录,那么跳转到登陆界面。如果用户访问的是登录页面,也需要放行。
处理流程:
- 用户登录成功时,将登陆信息放入session中。
- 在拦截器中,判断session是否为空,如果为空,说明没有登录,跳转到登录页面。如果不为空,说明已经登陆,放行。
- 如果访问的页面本身就是登录页面,直接放行。
登陆校验拦截器:
Public class LoginInterceptor implements HandlerInterceptor{ @Override Public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //如果是登录页面则放行 if(request.getRequestURI().indexOf("login.action")>=0){ return true; } HttpSession session = request.getSession(); //判断session是否为空,不为空则放行。 if(session.getAttribute("loginUser")!=null){ return true; } //用户没有登录则跳转到登录页面 request.getRequestDispatcher("/login.jsp").forward(request, response); return false; }}
登陆校验的控制器
//userid:用户账号,pwd:密码 @RequestMapping("/loginsubmit") public String loginsubmit(HttpSession session,String userid,String pwd)throws Exception{ //向session记录用户身份信息 User user=new User(); user.setId(userid); user.setPwd(pwd); session.setAttribute("loginUser", pwd); return "redirect:success"; }
对于登陆页面的判断,也可以直接放拦截器中进行判断。
<mvc:interceptors> <mvc:interceptor> <!--表示要拦截的路径,在这里只拦截 /haha/helloworld.action这个请求 --> <mvc:mapping path="/haha/helloworld.action"/> <!-- 需排除拦截的地址 --> <mvc:exclude-mapping path="/login.htm"/> <bean class="com.mq.service.MyInterceptor1"></bean> </mvc:interceptor> </mvc:interceptors>
阅读全文
0 0
- SpringMVC(四)—拦截器
- springMVC系列(四)——springMVC拦截器
- SpringMVC拦截器(四)
- SpringMVC笔记(四)拦截器
- springMVC入门(四)拦截器
- springMVC—springMVC拦截器
- SpringMVC—拦截器
- springMVC—拦截器
- 秀外慧中的springMVC(四)---springmvc的拦截器
- [SpringMVC] SpringMVC拦截器
- 【springmvc】——拦截器
- SpringMVC 5(拦截器)
- SpringMVC拦截器(一)
- SpringMVC拦截器(Interceptor)
- 四.SpringMVC中的 拦截器与异常处理
- springmvc学习笔记(28)——自定义拦截器
- Spring 学习笔记(11)—— SpringMVC 拦截器
- SpringMVC-----9、SpringMVC拦截器
- JavaScript中json时间格式转换yyyy-MM-dd HH:mm:ss
- JAVA实现简单控制台五子棋游戏
- 关闭浏览器后让PHP脚本一直运行
- java String 与日期类型的相互转换
- 分享几个java小程序代码
- SpringMVC(四)—拦截器
- 文件上传防御
- 170718 pwn-pwn0
- Jetty学习笔记(1)
- React+webpack搭建环境Hello World
- JS 监听手机返回键
- HTML&CSS精选笔记_布局与兼容性
- DEVOPS
- 怎样解决warning LNK4099: 未找到 PDB“vc100.pdb” 造成的链接 时间过长