• SpringMVC中的拦截器


    Spring MVC 的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

    用户可以自己定义一些拦截器来实现特定的功能。

    拦截器链(Interceptor Chain)就是将拦截器按一定的顺序联结成一条链。

    在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。

    拦截器和过滤器的区别:

      过滤器是servlet规范中的一部分,任何java web工程都可以使用。

      拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能用。

      过滤器在url-pattern中配置了/*之后,可以对所有要访问的资源拦截。

      拦截器它是只会拦截访问的控制器方法,如果访问的是jsp,html,css,image或者js是不会进行拦截的。

    想自定义拦截器, 要求必须实现:HandlerInterceptor接口

    需求:

    未登陆状态下点击首页Login

    可以登录

    如果已经登陆 , 点击login直接跳转到个人中心页面

     

    编写拦截器   实现HandlerInterceptor接口

    public class MyInterceptor implements HandlerInterceptor {
        
    /** * 预处理 controller方法执行前执行 * return true 放行 ,执行下一个拦截器, 如果没有, 执行controller中的方法 * return false 不放行, 可以直接跳转到其他页面 * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println ("preHandle...."); HttpSession session = request.getSession (); //如果用户名已存在,直接跳转到个人中心页面 if (null!=session.getAttribute ("username")){ request.getRequestDispatcher("/WEB-INF/pages/PersonalCenter.jsp").forward(request, response); return false; } //用户名不存在,用户未登陆, 可以进入登录页面,进行登录 return true; } /** * 后处理方法, controller方法执行后, 跳转到对应页面之前 * @param request * @param response * @param handler * @param modelAndView * @throws Exception */ @Override public void postHandle (HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println ("postHandle..."); } @Override public void afterCompletion (HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println ("afterCompletion.."); } }

    控制器代码

    @Controller
    @RequestMapping("/UserControl")
    public class UserController {
    
        //跳转到登录页面
        @RequestMapping("/GoLogin")
        public String GoLogin() throws Exception{
            System.out.println ("now begin jump Login page");
            return "Login";
        }
    
        @RequestMapping("/Login")
        //登录操作
        public String Login(User user,HttpSession session){
            System.out.println (user);
            //如果登录成功, 把用户名存进session域对象中
            session.setAttribute ("username",user.getUsername ());
            //跳转到个人中心
            System.out.println ("now begin jump PersonalCenter page");
            return "PersonalCenter";
        }
    
        @RequestMapping("/Logout")
        public String Logout(HttpSession session) throws Exception{
            System.out.println ("Logout....");
            //session过期
            session.invalidate ();
            System.out.println ("now begin jump index page");
            return "redirect:../index.jsp";
        }
    }

    在Spring的配置文件springmvc.xml中  配置拦截器

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!-- 开启注解扫描 -->
        <context:component-scan base-package="com.mkl"/>
    
        <!-- 视图解析器对象 -->
        <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/pages/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    <!--前端控制器,哪些静态资源不拦截--> <!-- 不处理静态内容 --> <mvc:default-servlet-handler/> <mvc:resources location="/css/" mapping="/css/**"/> <mvc:resources location="/images/" mapping="/images/**"/> <mvc:resources location="/js/" mapping="/js/**"/> <!-- 开启SpringMVC框架注解的支持 --> <mvc:annotation-driven />
    <!--配置拦截器--> <!--配置拦截器--> <mvc:interceptors> <!--配置拦截器--> <mvc:interceptor> <!--要拦截的具体的方法--> <mvc:mapping path="/UserControl/GoLogin"/> <mvc:mapping path="/UserControl/Login"/> <!--不要拦截的方法--> <!--<mvc:exclude-mapping path=""/>--> <!--配置拦截器对象--> <bean class="com.mkl.interceptor.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors> </beans>

    web.xml

    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app>
      <display-name>Archetype Created Web Application</display-name>
    
      <!--配置解决中文乱码的过滤器-->
      <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>
    
    
      <!--配置前端控制器-->
      <servlet>
        <servlet-name>dispatcherServlet</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>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
    </web-app>
  • 相关阅读:
    JS学习笔记ZT
    一条经典的汇总的sql
    sql 日期的转换
    微软.net安装失败时出现的问题
    sql 换行
    js 代码
    学习笔记
    decimal 的使用
    功能最完善,代码最简洁的选项卡代码(div+css)
    sql字母排序
  • 原文地址:https://www.cnblogs.com/mkl7/p/10805655.html
Copyright © 2020-2023  润新知