spring拦截器「建议收藏」

spring拦截器「建议收藏」spring拦截器实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter类都可以实现,主要有三个方法,preHandle在调用具体的controller之前执行,postHandle在调用controller之后,但是页面渲染之前执行,afterCompletion在页面渲染之后执行,拦截器的功能类似与filter的功能,个人认为spring为什么搞…

大家好,又见面了,我是你们的朋友全栈君。

spring拦截器实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter类都可以实现,主要有三个方法,preHandle在调用具体的controller之前执行,postHandle在调用controller之后,但是页面渲染之前执行,afterCompletion在页面渲染之后执行,拦截器的功能类似与filter的功能,个人认为spring为什么搞一个拦截器,主要是因为拦截器属于spring管理的范畴类,方便资源的分配,也便于与其他的整合,不会像filter这样突兀,和filter类型,同事命中多个拦截器时,按顺序一个一个往后执行。拦截器中可以做一些权限校验,数据校验转换等事情。

编写拦截器

public class UserContextInterceptor extends HandlerInterceptorAdapter {
    //拦截器可以使用spring的依赖注入
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //可以在这里处理用户认证
        if (true) {
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            try (PrintWriter writer = response.getWriter()) {
                writer.write("{'message':'认证不通过'}");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return super.preHandle(request, response, handler);
    }
}

配置拦截器

    <mvc:interceptors>
        <!-- 权限校验拦截器 -->
        <mvc:interceptor>
            <!--匹配的路径-->
            <mvc:mapping path="/**/*.do"/>
            <!--不包含的路径-->
            <mvc:exclude-mapping path="/riskControl/**/*.do"/>
            <bean class="com.zhan.design.interceptor.UserContextInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

如何配置,比如访问/hello/word.do,就会返回认证不通过

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149327.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《JavaScript 模式》读书笔记(5)— 对象创建模式4

    我们学完了大部分对象创建模式相关的内容,下面还有一些小而精的部分。七、对象常量JavaScript中没有常量的概念,虽然许多现代的编程环境可能为您提供了用以创建常量的const语句。作为一种变通方

    2022年3月25日
    321
  • java getclass_Java–getClass()和.Class的区别

    java getclass_Java–getClass()和.Class的区别在程序运行时期动态获得对象类型信息的操作,对比传统编程和反射的区别。传统编程:在编译阶段决定使用的类型反射:动态获得类型每个类都会产生一个对应的Class对象,也就是保存在.class文件。所有类都是在对其第一次使用时,动态加载到JVM的,当程序创建一个对类的静态成员的引用时,就会加载这个类。Class对象仅在需要的时候才会加载。类加载器首先会检查这个类的Class对象是否已被加载过,如果尚未加载…

    2022年6月15日
    27
  • springboot整合dubbo(xml形式)[通俗易懂]

    dubbo是一个远程服务调用的分布式框架。让我们告别了webservice的wsdl调用方式,取而代之的是服务注册和服务消费模式。下面对dubbo的组成做一个简单的解释,为的是读者能更好的理解下面的代码dubbo在结构上一共分为4个部分。1.provider:服务的提供者,将服务注册到Registry中,供外界调用。2.container:服务容器(加载dubbo配置文件,将配置文件…

    2022年4月17日
    76
  • IOS私人API用法

    IOS私人API用法

    2022年1月16日
    37
  • linux移动文件到另一个文件夹「建议收藏」

    linux移动文件到另一个文件夹「建议收藏」复制指定目录下的全部文件到另一个目录中1.文件及目录的复制是经常要用到的。linux下进行复制的命令为cp。假设复制源目录为dir1,目标目录为dir2。怎样才能将dir1下所有文件复制到dir2下了如果dir2目录不存在,则可以直接使用cp-rdir1dir2即可。如果dir2目录已存在,则需要使用cp-rdir1/.dir2例://没有publicData…

    2022年8月23日
    9
  • Python测试框架之pytest详解

    Python测试框架之pytest详解Python测试框架之前一直用的是unittest+HTMLTestRunner,听到有人说pytest很好用,所以这段时间就看了看pytest文档,在这里做个记录。官方文档介绍:Pytestisaframeworkthatmakesbuildingsimpleandscalabletestseasy.Testsareexpressiveand…

    2022年6月2日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号