springmvc 拦截器

47c87532ab4e4a52c6b3e68ec7bdc17e77b.jpg

69a0cc807b6422fda5a47824b8fb894554d.jpg

eec0c69d063be5e8daaa627fdff11a58c39.jpg

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">


    <!--过滤器:处理中文乱码-->
    <filter>
        <filter-name>encodingFilter</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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--Springmvc核心servlet
        配置文件:
        第一种:【servlet-name】-servlet.xml,比如:springmvc-servlet.xml
        第二种:改变命名空间namespace
        必须配置文件放在web-inf目录下
        第三种:contextConfigLocation-->
    <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*:imoocmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

f65041fc1dd2d0c413218b73059de4b982f.jpg

2af56353a4cc60e29a17b69e489cc6a048d.jpg

<?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.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--
    <mvc:annotation-driven >
        &lt;!&ndash; 消息转换器 &ndash;&gt;
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
        </mvc:message-converters>
    </mvc:annotation-driven>-->

    <!-- 配置自动扫描 -->
    <context:component-scan base-package="com.imooc.web"></context:component-scan>


    <!--拦截器的注册-->
    <mvc:interceptors>

        <mvc:interceptor>
            <mvc:mapping path="/user/**"/>
            <bean class="com.imooc.core.LogInterceptor"/>
        </mvc:interceptor>

        <mvc:interceptor>
<!--        <mvc:mapping path="/user/search"/>
            <mvc:mapping path="/user/updatepwd"/>
            <mvc:mapping path="/user/updateheaderPic"/>-->
            <mvc:mapping path="/user/**"/>
            <!--exclude-mapping在所有拦截中进行排除,一般在通配符中会有意义-->
            <mvc:exclude-mapping path="/user/updatepwd"/>
            <mvc:exclude-mapping path="/user/updatebackground/*"/>
            <bean class="com.imooc.core.LoginInterceptor"/>
        </mvc:interceptor>


    </mvc:interceptors>


    <!--映射物理路径-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>

396fd58e5d632d4b0b53e1568ec3efc5f16.jpg

public class LogInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception {
        System.out.println("LogInter:---->1:== ketetip ====preHandle============>");
        System.out.println("LogInter:-------当前执行的类是:"+handler.getClass());
        System.out.println("LogInter:-------当前执行的类是:"+handler);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("LogInter:---->3:== ketetip ====postHandle============>");
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("LogInter:---->4:== ketetip ====afterCompletion============>");
    }
}
package com.imooc.core;

import com.imooc.bean.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse httpServletResponse, Object o) throws Exception {
        User user = (User)request.getSession().getAttribute("session_user");
/*        if(user==null){
            System.out.println("&&LoginInter:1:ketetip=== --Login-- ===preHandle====>");
            httpServletResponse.sendRedirect("/login");
            return  false;
        }*/

        System.out.println("&&LoginInter:1:ketetip===--Login--===preHandle============>");
        return true;//如果返回false,会终止所有的请求
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("&&LoginInter:3:ketetip==--Login--====postHandle============>");
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("&&LoginInter:4:ketetip===--Login--===afterCompletion============>");
    }
}

http://localhost:8080/user/search

LogInter:---->1:== ketetip ====preHandle============>
LogInter:-------��ǰִ�е����ǣ�class com.imooc.web.UserController
LogInter:-------��ǰִ�е����ǣ�com.imooc.web.UserController@d0573a
&&LoginInter:1:ketetip===--Login--===preHandle============>
2:ketetip======search============>
&&LoginInter:3:ketetip==--Login--====postHandle============>
LogInter:---->3:== ketetip ====postHandle============>
&&LoginInter:4:ketetip===--Login--===afterCompletion============>
LogInter:---->4:== ketetip ====afterCompletion============>

根据运行结果可以看出,传入的时候是根据配置的先后顺序执行--》然后执行具体方法--》返回的时候是后边的先执行,配置在前面的后执行

package com.imooc.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/user")
public class UserController {
    //查询用户
    @RequestMapping("/search")
    public String search(){
        System.out.println("2:ketetip======search============>");
        return "user/search";
    }

    //查询用户
    @RequestMapping("/updatepwd")
    public String updatepwd(){
        System.out.println("ketetip== login ====updatepwd============>");
        return "user/updatepwd";
    }

    //查询用户
    @RequestMapping("/updateheaderPic")
    public String updateheaderPic(){
        System.out.println("ketetip=== login ===updateheaderPic============>");
        return "user/updateheaderPic";
    }
    //查询用户
    @RequestMapping("/updatebackground/{id}")
    public String updatebackground(){
        System.out.println("ketetip==== login ==updateheaderPic============>");
        return "user/updateheaderPic";
    }
}

转载于:https://my.oschina.net/popfei/blog/1843366

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值