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

一、什么是拦截器?

拦截器是对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. 精通Web Analytics 2.0 (13) 第十一章:变身分析忍者的指导原则

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第十一章:变身分析忍者的指导原则 这个激动人心的一章,分析了几乎所有工作的各个方面. 目标很简单:使用成熟的方法来帮助避免淹死的 ...

  2. .Net MVC 获取Response和Request对象

    通过  System.Web.HttpContext.Current  获取 public static string ConstractExportExcel(List<ERP_Contrac ...

  3. 零配置使用springboot

    1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  4. 编写优秀Bug报告的艺术及案例分析

    编写优秀Bug报告的艺术及案例分析 ---Rex Black原著<Fine art of writing a good bug report > ---Kiki翻译于2005/5/28 前 ...

  5. git openssl 模块生成 https 请求的 ssl 测试证书

    1,请先确定安装了相关模块 1.1,git --version 1.2,openssl version -a 2,创建一个目录, cd 到该目录下 3,生成私钥  key 文件   openssl g ...

  6. Linux 压缩归档

    压缩 压缩工具:gzip  bzip2  zip  tar 压缩格式 常见的压缩格式:gz.bz2.xz.zip.Z  tar.gz格式 [root@xuegod72 mnt]# tar zcf gr ...

  7. JEECG 3.7.3 新春版本发布,企业级JAVA快速开发平台

    JEECG 3.7.3新春版本发布 -  微云快速开发平台 导读           ⊙精美Echart报表 ⊙二维码生成功能 ⊙Online接口改造采用JWT机制 ⊙智能菜单搜索 ⊙代码生成器模板优 ...

  8. python 阿狸的进阶之路(5)

    一.模块 1.什么是模块: 包含了一组功能的python文件,文件名是xxx.py,模块名是module. 可以使用 import module,四个通用的类别: (1)用python编写的py文件 ...

  9. supervisor process management

    supervisor是unix like系统的进程管理工具 安装: pip install supervisor 配置文件: echo_supervisord_conf # 打印一个配置文件样例 ec ...

  10. cxVerticalGrid赋值是实时更新

    procedure TForm1.cxVerticalGrid1Edited(Sender: TObject; ARowProperties: TcxCustomEditorRowProperties ...