精华内容
下载资源
问答
  • java拦截器配置
    万次阅读
    2017-05-18 22:03:46

    1.场景还原

          近期的项目中有很多地方要用到拦截器,比如权限管理,在访问该controller之前先进行对其拦截一把,如果满足权限要求则放行,不满足则抛出无权限异常。

    2.实现方案

    ①定义一个权限访问接口

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface AuthCode {
    
        /**
         * 1)纯操作码,如:query;
         * @return
         */
        String[] value() default {};
    }
    

     ②在controller上面申明权限

    /**
     * 获取未维护记录的消息列表
     */
    @AuthCode({"company.query","company.add"})
    @RequestMapping(value = "/calculateKpi", produces = "application/json;charset=utf-8")
    public String calculateKpi(){
    
       LogUtil.info(logger, "获取未维护记录的消息列表=========start");
       List<KpiEx> list = rtgCategoryService.calculateKpi();
       LogUtil.info(logger, "获取未维护记录的消息列表========
    更多相关内容
  • Java 拦截器配置及使用

    千次阅读 2021-03-15 13:08:50
    * 这个方法的链式结构跟正常访问的方向是相反的,也就是说先声明的Interceptor拦截器该方法反而会后调用, * 这跟Struts2里面的拦截器的执行过程有点像, * 只是Struts2里面的intercept方法中要手动的调用...

    packagecom.panshi.ProjectInterceptor.Interceptor;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.stereotype.Component;importorg.springframework.util.StringUtils;importorg.springframework.web.servlet.ModelAndView;importorg.springframework.web.servlet.handler.HandlerInterceptorAdapter;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;

    @Componentpublic class recordInterceptor extendsHandlerInterceptorAdapter {private final static Logger logger= LoggerFactory.getLogger("interceptor");/*** preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用,

    * SpringMVC中的Interceptor拦截器是链式的,可以同时存在多个Interceptor,

    * 然后SpringMVC会根据声明的前后顺序一个接一个的执行,

    * 而且所有的Interceptor中的preHandle方法都会在Controller方法调用之前调用。

    * SpringMVC的这种Interceptor链式结构也是可以进行中断的,

    * 这种中断方式是令preHandle的返回值为false,当preHandle的返回值为false的时候整个请求就结束了。*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throwsException {

    logger.info("拦截了:"+request.getRequestURI());

    HttpSession session=request.getSession();if(!StringUtils.isEmpty(session.getAttribute("userId"))){/*** 相关验证

    **/

    return true;

    }else{

    response.sendRedirect("/logins");return false;

    }//return super.preHandle(request, response, handler);

    }/*** 这个方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行。

    * postHandle是进行处理器拦截用的,它的执行时间是在处理器进行处理之 后, 也就是在Controller的方法调用之后执行,

    * 但是它会在DispatcherServlet进行视图的渲染之前执行,也就是说在这个方法中你可以对ModelAndView进行操作。

    * 这个方法的链式结构跟正常访问的方向是相反的,也就是说先声明的Interceptor拦截器该方法反而会后调用,

    * 这跟Struts2里面的拦截器的执行过程有点像,

    * 只是Struts2里面的intercept方法中要手动的调用ActionInvocation的invoke方法,

    * Struts2中调用ActionInvocation的invoke方法就是调用下一个Interceptor或者是调用action,

    * 然后要在Interceptor之前调用的内容都写在调用invoke之前,要在Interceptor之后调用的内容都写在调用invoke方法之后。*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throwsException {

    }/*** 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。

    * 该方法将在整个请求完成之后,也就是DispatcherServlet渲染了视图执行, 这个方法的主要作用是用于清理资源的,*/@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) throwsException {

    }

    }

    展开全文
  • 自定义拦截器的实现以及拦截器的详细配置配置文件里面有特别详细的注释,希望对刚接触拦截器的同学有帮助
  • Java拦截器,可用于使用Prometheus监视Grpc服务。 特征 该库的功能包括两个监视grpc拦截器, MonitoringServerInterceptor和MonitoringClientInterceptor 。 这些拦截器可以分别附加到grpc服务器和客户端存根。 ...
  • 做一个简单的spring请求过滤,session存在显示,不存在自动跳转指定页面.
  • java interceptor 自定义拦截器 配置

    千次阅读 2019-03-27 16:55:24
    Java自定义拦截器详细教程 2018年10月31日 10:59:29 郭_Sir 阅读数:821 前言 Java编程中经常会有一些需要我们进行登录拦截的操作,或者实现,那么怎么用java代码实现一个拦截器呢?一般情况下实现拦截器需要两步,...

    Java自定义拦截器详细教程

    2018年10月31日 10:59:29 郭_Sir 阅读数:821

    前言

    Java编程中经常会有一些需要我们进行登录拦截的操作,或者实现,那么怎么用java代码实现一个拦截器呢?一般情况下实现拦截器需要两步,今天就给大家演示一个拦截器,废话不多说,代码+注释直接奉上!

    第一步:自定义拦截器

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.HandlerInterceptor;
    
    /**
      *自定义拦截器
      *实现HandlerInterceptor接口
      **/
    public class LoginInterceptor implements HandlerInterceptor{
    	@Override
    	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    			throws Exception {
    		// 获取作用域的user信息,此user信息需要在登录操作的同事放到作用域,以便于此处获取
    		String user=(String) request.getSession().getAttribute("user");
    		//获取请求的路径
    		String url=request.getRequestURI();
    		//打印路径信息,作为后台日志进行查看
    		System.out.println(url);
    		//判断user对象的内容是否不为空;
    		//或者是否是访问的后台登录方法(login);
    		//因为我的页面直接导入的easyUI的js包为防止把页面样式拦截,所以加个判断,如果不是这样的话此判断可以省略
    		if(user!=null|url.endsWith("项目名/login")|url.lastIndexOf("jquery-easyui-1.4")>-1) {
    			return HandlerInterceptor.super.preHandle(request, response, handler);
    		}else {
    		    //判断没通过,证明用户没有进行登录操作,操作非法,进行返回登录页面(login.jsp)进行登录
    		    //返回错误提示信息("请先登录!")
    			request.getSession().setAttribute("msg", "请先登录!");
    			response.sendRedirect("login.jsp");
    			return false;
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    第二步:拦截器注册类,使拦截器生效

    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    @Configuration
    public class MyConfig implements WebMvcConfigurer {
    	@Override
    	public void addInterceptors(InterceptorRegistry registry) {
    		// 使拦截器生效1.此处参数是我们自定义的拦截器名( LoginInterceptor ) 2.添加拦截规则(/**)拦截全部               
    		registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");
    		WebMvcConfigurer.super.addInterceptors(registry);
    	}
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    控制层代码

        //登录验证是否是name='zhangsan',pwd='123' 的用户
    	@RequestMapping("login")
    	public String doLogin(String name,String pwd,HttpServletRequest request) {
    		//从请求中获取登录名信息,放到user对象,并放入作用域中,方便拦截器获取
    		request.getSession().setAttribute("user", name);
    			//判断用户名和密码是否正确,此处也可以进行后台数据库的查询,我为了简单写死了登录名和密码
    			if(name.equals("zhangsan")&&pwd.equals("123")) {
    				//用户名和密码正确重定向到跳转页面的后台方法
    				return "redirect:toPageList";
    			}else {
    				// 登录失败,返回提示信息
    				request.getSession().setAttribute("msg", "账号或密码错误!");
    				//返回登录页面,重新登录
    				return "login";
    			}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    展开全文
  • SpringBoot整合Mybatis完整详细版含注册、登录、拦截器配置功能
  • 详解Java拦截器

    2021-08-01 13:22:42
    Interceptors are used to implement cross-cutting concerns, such as ...In Java EE 5, Interceptors were allowed only on EJBs. In Java EE 6, Interceptors became a new specification of its own, abstracte.

    Interceptors are used to implement cross-cutting concerns, such as logging, auditing, and security, from the business logic.

    In Java EE 5, Interceptors were allowed only on EJBs. In Java EE 6, Interceptors became a new specification of its own, abstracted at a higher level so that it can be more generically applied to a broader set of specifications in the platform.

    They intercept invocations and life-cycle events on an associated target class. Basically, an interceptor is a class whose methods are invoked when business methods on a target class are invoked, life-cycle events such as methods that create/destroy the bean occur, or an EJB timeout method occurs. The CDI specification defines a type-safe mechanism for associating interceptors to beans using interceptor bindings.

    Java web三大器:过滤器-监听器-拦截器

    Tables过滤器(Filter)监听器(Listener)拦截器(Interceptor)
    关注的点wed请求系统级别参数、对象Action(部分web请求)
    如何实现的函数回调事件Java反射机制(动态代理)
    应用场景设置字符编码统计网站在线人数拦截未登录用户
    URL级别的权限访问控制清除过期session审计日志
    过滤敏感词汇
    压缩响应信息
    是否依赖servlet容器依赖不依赖
    Serverlet提供的支持Filter接口ServletContextListener抽象接口Action(部分web请求)
    HttpSessionListener抽象接口
    Spring提供的支持HandlerinterceptorAdapter类
    HandlerInterceptor接口
    级别系统级系统级非系统级

    注意:拦截器的对象只能是实现了接口的类,而不能拦截URL这种链接。

    一、拦截器的概念

    java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前进行拦截,然后再之前或者之后加入某些操作。

    二、拦截器的原理

    大部分时候,拦截器方法都是通过代理的方式来调用的。

    三、自定义拦截器的步骤

    • 第一步:自定义一个实现了Interceptor接口的类,或者继承抽象类AbstractInterceptor。
    • 第二步:在配置文件中注册定义的拦截器。
    • 第三步:在需要使用Action中引用上述定义的拦截器,为了方便也可以将拦截器定义为默认的拦截器,这样在不加特殊说明的情况下,所有的Action都被这个拦截器拦截。

    四、过滤器与拦截器的区别

    过滤器可以简单的理解为“取你所想取”,过滤器关注的是web请求;拦截器可以简单的理解为“拒你所想拒”,拦截器关注的是方法调用,比如拦截敏感词汇。
    1.拦截器是基于java反射机制来实现的,而过滤器是基于函数回调来实现的。(有人说,拦截器是基于动态代理来实现的)
    2.拦截器不依赖servlet容器,过滤器依赖于servlet容器。
    3.拦截器只对Action起作用,过滤器可以对所有请求起作用。
    4.拦截器可以访问Action上下文和值栈中的对象,过滤器不能。
    5.在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时调用一次。

    五、Spring拦截器

    • 第一步 定义拦截器类,该类实现HandlerInterceptor接口
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    @Component
    public class MyInterceptor implements HandlerInterceptor {
     
        /**
         * 该方法是在执行执行servlet的 service方法之前执行的
         * 即在进入controller之前调用
         * @return 如果返回true表示继续执行下一个拦截器的PreHandle方法;如果没有拦截器了,则执行controller
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
            String url = request.getRequestURI();
            System.out.println("进入Controller之前");
            if(url.indexOf("login") >= 0){
                return true;
            }
     
            String username = request.getParameter("username");
            if(username == null){
                return false;
            }
     
            return true;
        }
     
        /**
         *在执行完controller之后,返回视图之前执行,我们可以对controller返回的结果做处理
         * 执行顺序:先执行最后一个拦截器的postHandle方法,一次向前
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                               ModelAndView modelAndView) throws Exception{
     
            System.out.println("解析视图之前.....");
        }
     
        /**
         * 整个请求结束之后,即返回视图之后执行
         *该方法需要同一拦截器的preHandle返回true时执行,
         * 如果该拦截器preHandle返回false,则该拦截器的afterCompletion不执行
         * 执行顺序:先执行最后一个返回true的拦截器的afterCompletion,在依次向前
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                          Exception ex) throws Exception{
            System.out.println("视图解析完成...");
        }
    }

    Springboot环境中配置拦截器:

    @Configuration
    public class InterceptorConfig implements WebMvcConfigurer {
     
        @Autowired
        private MyInterceptor interceptor;
     
        public void addInterceptors(InterceptorRegistry registry) {
            //addPathPatterns指定拦截器要拦截的路径
            //excludePathPatterns指定拦截器不拦截的路径
            registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns("/logout");
        }
    }

    Spring MVC环境中配置拦截器:

    <mvc:interceptors>  
       <!--  自定义拦截器   -->
        <mvc:interceptor>  
            <!-- 进行拦截:/**表示拦截所有controller -->
            <mvc:mapping path="/**" />
           <!-- 不进行拦截 -->
            <mvc:exclude-mapping path="/logout"/> 
            <bean class="com.example.demp.Interceptor.MyInterceptor"/>
        </mvc:interceptor>  
    </mvc:interceptors> 

    上面两种选一种即可
    编写Controller测试:

    @RestController
    public class LoginController {
     
        @RequestMapping("/login")
        public String intercept(){
            System.out.println("Controller执行中....");
            return "Hello Interceptor!";
        }
     
        @RequestMapping("/logout")
        public String logout(){
            System.out.println("注销中....");
            return "logouting.....!";
        }
    }

    先访问login,测试结果如下:

    进入Controller之前
    Controller执行中....
    解析视图之前.....
    视图解析完成...

    再访问logout:

    注销中....

    六、总结:

    • 1.过滤器(Filter):所谓过滤器顾名思义是用来过滤的,Java的过滤器能够为我们提供系统级别的过滤,也就是说,能过滤所有的web请求,这一点,是拦截器无法做到的。在Java Web中,你传入request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话)。filter 流程是线性的,url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收。

    • 2.监听器(Listener):Java的监听器,也是系统级别的监听。监听器随web应用的启动而启动。Java的监听器在c/s模式里面经常用到,它会对特定的事件产生一个处理。监听在很多模式下用到,比如说观察者模式,就是一个使用监听器来实现的,在比如统计网站的在线人数。Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。

    • 3.拦截器(Interceptor):java里的拦截器提供的是非系统级别的拦截,也就是说,就覆盖面来说,拦截器不如过滤器强大,但是更有针对性。Java中的拦截器是基于Java反射机制实现的,更准确的划分,应该是基于JDK实现的动态代理。它依赖于具体的接口,在运行期间动态生成字节码。拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截然后再之前或者之后加入某些操作。java的拦截器主要是用在插件上,扩展件上比如 Hibernate Spring Struts2等,有点类似面向切片的技术,在用之前先要在配置文件即xml,文件里声明一段的那个东西。

    参考资料:https://www.jianshu.com/p/d25349f0ab02

    展开全文
  • mybatis mysql 分页拦截器,可以针对方法名称,或指定的参数进行拦截
  • Java拦截器

    千次阅读 2021-03-01 08:03:52
    下面是演示使用拦截器拦截未登录的用户访问需要登录的模块情景,使用配置方式实现和注解方式实现代码:配置方式:1、web.xml中配置监听器,对于所有的/admin开头的请求,都走com.blog.interceptor.LoginInterceptor...
  • 对于springmvc,有两种方式配置拦截器。一是实现HandlerInterceptor接口,如public class MyInterceptor1 implements HandlerInterceptor {//该方法在action执行前执行,可以实现对数据的预处理,// 比如:编码、...
  • 1.拦截器的使用示例 2.基于反射自己写的拦截器 3.在mvc框架配置即可使用
  • 转载至 ... 一、三种通配符url-pattern写法 1、精确匹配。以”/“开头,加上servlet名称:/ad; 2、路径匹配。以”/”开头,加上通配符”*”...以上都找不到servlet,就用默认的servlet,配置为 <url-pattern>/ 。
  • 1.与过滤器filter的区别2.springMVC中拦截器的必须实现的三个方法:3. 拦截器类的编写:package com.imooc.core;import com.imooc.bean.User;import org.springframework.web.servlet.HandlerInterceptor;import org...
  • 拦截器是基于java的反射机制的,而过滤器是基于函数回调。 拦截器不依赖与servlet容是依赖于spring容器,过滤器依赖与servlet容器。 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用,可以...
  • Java拦截器实现

    2021-02-12 09:12:14
    java拦截器实现功能类似于aop功能的实现,实现拦截部分方法,一般用于类似 登录进入A页面,未登录进入B页面实现方法有两种 实现Interceptor 接口 或者 继承HandlerInterceptorAdapter类,实现接口需要实现其中所有...
  • 轻松实现java拦截器+自定义注解

    千次阅读 2021-03-16 16:47:51
    拦截器的使用很简单,定义一个自己的拦截器,向配置中添加一下就可以使用。为了方便,之后又引入了注解。目录和概述概述假设需求:访问项目的controller是都要进行"token验证",除了某些像登录之类的方法。项目结构...
  • java 干货,对接口参数进行中的特殊字符,如insert select * % 等进行判断,进行过滤.
  • Spring RestTemplate经常被用作客户端向Restful API发送各种请求,也许你也碰到过这种需求,很多请求都需要用到相似或者相同...Spring提供了ClientHttpRequestInterceptor接口,可以对请求进行拦截,并在其被发送至...
  • 这个我遇到的情况有所不同,我的情况是进入拦截器后,然后进入请求,请求中返回的内容没有做@ResponseBody标识, 就会再一次进入到拦截器中去。 细节决定成败,问题不大,找了两三个小时,在这里记录一下 ...
  • Java三大器之拦截器(Interceptor)

    千次阅读 2020-10-12 14:03:29
    前言:前面2篇博客,我们分析了Java中过滤器和监听器的实现原理,今天我们来看看拦截器。 1,拦截器的概念     java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一...
  • java 拦截器的作用?

    千次阅读 2019-05-23 16:31:28
    1.拦截器都是做什么的? 做的事和请求和响应有关。(比如前端的css或者一些加载的路径都会走这个拦截器) 访问日志(记录访客的ip,来源),在线统计人数,字符集转换,身份验证 可以不破坏你的业务逻辑在你的业务...
  • NULL 博文链接:https://zhongmin2012.iteye.com/blog/2339896
  • 在Filter中拦截路径配置有四种形式具体资源路径拦截:@WebFilter("/index.jsp") //这是指访问index.jsp的时候会经过过滤具体目录拦截:@WebFilter("/user/*") //这是指访问user目录下的所有资源时会经过过滤具体...
  • Spring Boot拦截器配置拦截登陆

    万次阅读 多人点赞 2018-07-09 18:34:57
    一,pom.xml的配置 这里很简单,先引入spring-boot-starter-parent,parent 是父模块,由父模块统一进行 spring-boot 版本管理,dependencies 中与 spring-boot 启动绑定的包不需要再指定版本。 <parent> ...
  • 一、先定义自己的拦截器 实现HandlerInterceptor 接口,重写preHandle(),postHandle(),afterCompletion()方法。 package com.hnms.demo.interceptor; import org.springframework.web.servlet....
  • 但是过滤器是java实现的,它需要依赖于Servlet容器,而拦截器是SprignMVC实现的一个机制,独立于Servlet容器,而且能实现IOC容器中的各个bean。简单的说:过滤器的urlPattern针对的是所有的请求,而拦截器的url...
  • 1,拦截器的概念 java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用...
  • 拦截器配置: package com.xx.xx.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import redis.clients.jedis.Jedis; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 183,265
精华内容 73,306
关键字:

java拦截器的配置

java 订阅