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

一、什么是拦截器?

拦截器是对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. iPhone may be running a version of iOS that is not supported by this version of Xcode

    Xcode6.0.1对ios8.1真机不识别,升级Xcode6.0.1为Xcode6.1,就行了.也可以,降低手机版本为以前的版本,想要降低手机版本请看我的另一片博客<iphone手机版本降级& ...

  2. Mybatis学习5标签:if,where,sql,foreach

    包装类:QueryVO.java package pojo; import java.util.ArrayList; import java.util.List; public class Query ...

  3. 1. easyui tree 初始化的两种方式

    /** * 查询角色分类 */function queryRoleCategoryTree(selectId) { var url = basePath + 'rest/roleCategoryCon ...

  4. Android自定义ProgressBar样式

    我们使用的进度条多种多样,下面有几种自定义的进度条的样式,下面介绍几个. 进度条的有基本的四种样式: 默认风格的进度条: android:progressBarStyle 水平长型进度条: andro ...

  5. Android xml 绘制图形

    一般用shape定义的xml文件存放在drawable目录下,若项目没有该目录则新建一个,而不要将它放到drawable-hdpi等目录中. 使用shape可以自定义形状,可以定义下面四种类型的形状, ...

  6. 汉诺塔问题python

    count = 0def hanoi(n,src,mid,dst): global count if n == 1: print("{}:{}->{}".format(1,s ...

  7. oracle查询重复的数据

    在oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是oracle中的哪一个数据文件.块.行上.在重复的记录中,可能所有列的内容都相同,但rowi ...

  8. mybatis中xml文件的${}和#{}区别

    之前的笔记:#{}相当于JDBC的? ${}是字符串连接符,如果入参为普通类型{}中只写value 在项目中要实现所有业务批量提交的功能,实现方式,把表名,表主键字段当做参数传递,在xml文件中全部使 ...

  9. 02.photoshop制作透明图片步骤

    1.首先打开PS软件和图片如下.文件-新建. 2.如下图背景内容选择-透明.在确定. 3.出现了白底这就是透明的. 4.将图片背景都去除 5.在选择文件-存储为 6.格式选择.GIF的文件.其它不是透 ...

  10. MySQL(Innodb)索引的原理

    引言 回想四年前,我在学习mysql的索引这块的时候,老师在讲索引的时候,是像下面这么说的 索引就像一本书的目录.而当用户通过索引查找数据时,就好比用户通过目录查询某章节的某个知识点.这样就帮助用户有 ...