拦截器加注解可以实现登录权限验证等操作,我的应用场景也是为了验证这个,下面是简单的实现步骤
 

一、什么是拦截器?

拦截器是对action的一种拦截,可以在请求前后进行一些处理
可拦截controller和view内容
 

二、Spring中自定义拦截器步骤

 
1、Spring中继承HandlerInterceptorAdapter或实现HandlerInterceptor接口
public class Auth58Interceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
return true;
}
}
 
2、重写preHandler等方法
HandlerInterceptorAdapter下的有几个方法分别处理拦截请求的操作前后的内容,可根据自己需要选择方法重写
 
业务处理请求之前:preHandle
该方法返回boolean类型值,如果为true继续下面的内容,为false直接退出该请求,不会继续执行了
preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
业务处理请求之后,DispatcherServlet渲染ModelAndView视图之前:postHandle
preHandle返回true时才会执行这里
postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
 
业务处理请求之后,DispatcherServlet渲染了ModelAndView视图之后:afterCompletion
preHandle返回true时才会执行这里
afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
 
有异步请求时触发:afterConcurrentHandlingStarted
在preHandle返回true之后才执行这里,这里执行完成之后会触发postHandle和afterCompletion
afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
 
3、在web.xml中注册拦截器
可以设置多个interceptor拦截器,从上至下进行匹配拦截
mvc:mapping path="":匹配那种路径可以命中拦截器,如果不配置或配置/**将会拦截所有Controller
mvc:exclude-mapping path="":排除该路径不进行拦截,静态资源进行拦截我这里会出问题,所以排除掉
bean class="":拦截器的类,包含包名的全路径
 
例子如下:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" /><!--如果不配置或/**,将拦截所有的Controller-->
<mvc:exclude-mapping path="/static/**" />
<mvc:exclude-mapping path="/views/**" />
<bean class="com.zhuanzhuan.zzappqa.annotations.Auth58Interceptor" />
</mvc:interceptor>
</mvc:interceptors>
 

三、拦截器和注解配合使用

自定义注解的方式详见:http://www.cnblogs.com/meitian/p/9048331.html
 
我这里用途是,判断接口需要的权限,进而查看当前用户是否有访问全新
 
步骤1:拦截器重新preHandler()方法,解析自定义注解上的属性值
步骤2:获得当前请求信息中的用户信息,从数据库中拿到当前登录用户的权限
步骤3:通过步骤2获得当前用户权限和步骤1中限定的权限作对比,判断是否允许继续访问或是跳转到登录等其他操作
 
一个未处理逻辑的例子如下:
拦截器代码:
package com.xxx.annotations;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.annotation.Annotation; public class Auth58Interceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
HandlerMethod handlerMethod = (HandlerMethod) handler; if(handlerMethod.getBeanType().isAnnotationPresent(Auth58.class)){//注意要用handlerMethod.getBeanType()获得对象,不能通过getClass()获得对象
System.out.println("命中拦截器");
return true;
}else{
System.out.println("未命中拦截器");
return true;
} }
}
 
注意:要用handlerMethod.getBeanType()获得对象,不能通过getClass()获得对象
解析注解属性值和进一步的判断方法这里就不写了,解析属性值的上面注解那篇里有介绍
单独业务逻辑各位就单独处理吧
 
 
 
 
 
 

Java拦截器+注解搭配使用的更多相关文章

  1. springboot + 拦截器 + 注解 实现自定义权限验证

    springboot + 拦截器 + 注解 实现自定义权限验证最近用到一种前端模板技术:jtwig,在权限控制上没有用springSecurity.因此用拦截器和注解结合实现了权限控制. 1.1 定义 ...

  2. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...

  3. java 拦截器

    一.前言 这是一篇关于 java 拦截器的文章,是我的写 java  web 所遇见的问题.当我们写好一个网站,必须要通过登陆页面才可以进入这个系统.那么我们就得写个 java 拦截器,如果是通过登录 ...

  4. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求   Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java ...

  5. Spring MVC拦截器+注解方式实现防止表单重复提交

    原理:在新建页面中Session保存token随机码,当保存时验证,通过后删除,当再次点击保存时由于服务器端的Session中已经不存在了,所有无法验证通过. 注,如果是集群的方式,则需要将token ...

  6. [置顶] 使用struts拦截器+注解实现网络安全要求中的日志审计功能

    J2EE项目中出于安全的角度考虑,用户行为审计日志功能必不可少,通过本demo可以实现如下功能: 1.项目中记录审计日志的方法. 2.struts拦截器的基本配置和使用方法. 3.struts拦截器中 ...

  7. java 拦截器和过滤器区别(转载)

    1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的 ...

  8. java拦截器(interceptor)

    1.声明式 (1)注解,使用Aspect的@Aspect (2)实现HandlerInterceptor /** * 拦截请求 * * @author Administrator * */ @Comp ...

  9. Java拦截器

    拦截器,主要用于拦截前端请求,常用于登录检查. 下面是演示使用拦截器拦截未登录的用户访问需要登录的模块情景,使用配置方式实现和注解方式实现代码: 配置方式: 1.web.xml中配置监听器,对于所有的 ...

随机推荐

  1. python 读取grib \grib2

    一.环境准备(1).python3环境 (2).wgirb工具(用于读取grib1文件),下载地址:  ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib (3).wgi ...

  2. NAS 百科 —— http://baike.baidu.com/item/NAS%E7%BD%91%E7%BB%9C%E5%AD%98%E5%82%A8

    NAS(Network Attached Storage)网络存储基于标准网络协议实现数据传输,为网络中的Windows / Linux / Mac OS 等各种不同操作系统的计算机提供文件共享和数据 ...

  3. nginx配置资源缓存

    缓存nginx服务器的静态文件.如css,js,htm,html,jpg,gif,png,flv,swf,这些文件都不是经常更新.便于缓存以减轻服务器的压力. 打开配置文件/usr/local/ngi ...

  4. 列表(list) 的 基本操作

    举例说明:names = ["zhangyang", "guyun", 'xiangpeng', ['alex','jack'], "xuliangc ...

  5. putty登录显示IP

    登陆服务器 cd vi .bashrc 在尾部加入如下代码 if [ "$SSH_CONNECTION" != '' -a "$TERM" != 'linux' ...

  6. bash中 2>&1 & 的解释

    1.首先,bash中0,1,2三个数字分别代表STDIN_FILENO.STDOUT_FILENO.STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制 ...

  7. Linux查看当前系统的发行版信息

    lsb_release命令用来查看当前系统的发行版信息(prints certain LSB (Linux Standard Base) and Distribution information.). ...

  8. 用 CentOS 7 打造合适的科研环境

    这篇博文记录了我用 CentOS 7 搭建 地震学科研环境 的过程,供我个人在未来重装系统时参考.对于其他地震学科研人员,也许有借鉴意义. 阅读须知: 本文适用于个人电脑,不适用于服务器: 不推荐刚接 ...

  9. Spring事务控制和回滚

    1在一个项目中ssh结构,spring2.5,事务控制采用的是tx拦截器的方式. 自己写了个 int a=1/0;异常抛出了,但是事务还是提交了,怎么搞都不行. 现将看到的一些事务控制总结下来: 事务 ...

  10. Servlet3模块化应用中,@Controller没有被注入,导致出现:No mapping found for HTTP request with URI [/xxx/xxx] in DispatcherServlet with name 'springmvc'

    问题描述:Servlet3模块化应用中,@Controller没有被注入,导致出现: org.springframework.web.servlet.DispatcherServlet noHandl ...