- 浏览: 1324945 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (896)
- spring4 (14)
- hibernate3 (26)
- spring2 (35)
- struts2 (55)
- struts1 (15)
- 设计模式 (15)
- java (172)
- mybatis3 (11)
- sql (17)
- mysql (13)
- jbpm (10)
- J2EE (45)
- tools (29)
- js (83)
- 数据结构 (13)
- Html (26)
- web (22)
- flex (33)
- Oracle (57)
- linux (49)
- 算法 (6)
- 其它 (12)
- easyui (1)
- bootstrap (13)
- xml (2)
- tomcat (1)
- redis (10)
- activemq (2)
- webservice (11)
- maven (2)
- springboot (1)
- ubuntu (1)
- python (14)
- rocketmq (1)
- springcloud (10)
- opencv (1)
最新评论
-
mike_eclipse:
Hashtable是线程不安全的吗?好像是线程安全的吧?
多线程之集合类 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
lodop打印控件 -
xingcxb:
经过测试,假的,依旧会出现中文乱码!!!!store方法里面采 ...
java 读写Properties文件,不会出现中文乱码 -
tiger20111989:
...
Spring注解方式管理事务 -
zw7534313:
...
js 文字上下滚动 无间断循环显示
springboot中使用springmvc的拦截器-HandlerInterceptorAdapter
拦截器配合注解使用: 权限判断
(1)controller层:
@AuthorityValid(validate=true)
@RequestMapping("/")
public String list(Model model) {
System.out.println(" *** controller *** "+this);
return "index";
}
(2)自定义注解@AuthorityValid
@Documented
@Inherited
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthorityValid {
boolean validate() default true;
}
(3)拦截器:会拦截带@AuthorityValid注解的方法
public class AuthorityInterceptorAdapter extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(AuthorityInterceptorAdapter.class);
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//处理Permission Annotation,实现方法级权限控制
if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
/*
* 1、确认当前的controller是否需要进行权限判定,如果需要则进行验证。
* 2、当controller不需要验证,则验证当前的方法是否需要权限验证,需要则进行验证,不需要则跳出
* */
//获取controller注解, controller检查是否需要验证权限控制
AuthorityValid permission = handlerMethod.getMethod().getDeclaringClass().getAnnotation(AuthorityValid.class);
if (permission != null && !permission.validate()) { //不需要验证权限
return super.preHandle(request, response, handler);
}
//获取方法注解,方法检查是否需要验证权限控制
permission = handlerMethod.getMethod().getAnnotation(AuthorityValid.class);
if (permission != null && !permission.validate()) { //不需要验证权限
Parameter[] args = handlerMethod.getMethod().getParameters();
logger.info("参数:{}", args[0]);
return super.preHandle(request, response, handler);
}
// 权限判断,没有权限则跳转至无权限页面,有权限则走正常流程
logger.info("权限判断...");
}
return super.preHandle(request, response, handler);
}
}
(4)自动配置
@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {
@Bean
public AuthorityInterceptorAdapter getValidInterceptor() {
return new AuthorityInterceptorAdapter();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration addInterceptor = registry.addInterceptor(getValidInterceptor());
// 排除配置
addInterceptor.excludePathPatterns("/error");
addInterceptor.excludePathPatterns("/login**");
// 拦截配置
addInterceptor.addPathPatterns("/**");
}
}
拦截器配合注解使用: 权限判断
(1)controller层:
@AuthorityValid(validate=true)
@RequestMapping("/")
public String list(Model model) {
System.out.println(" *** controller *** "+this);
return "index";
}
(2)自定义注解@AuthorityValid
@Documented
@Inherited
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthorityValid {
boolean validate() default true;
}
(3)拦截器:会拦截带@AuthorityValid注解的方法
public class AuthorityInterceptorAdapter extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(AuthorityInterceptorAdapter.class);
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//处理Permission Annotation,实现方法级权限控制
if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
/*
* 1、确认当前的controller是否需要进行权限判定,如果需要则进行验证。
* 2、当controller不需要验证,则验证当前的方法是否需要权限验证,需要则进行验证,不需要则跳出
* */
//获取controller注解, controller检查是否需要验证权限控制
AuthorityValid permission = handlerMethod.getMethod().getDeclaringClass().getAnnotation(AuthorityValid.class);
if (permission != null && !permission.validate()) { //不需要验证权限
return super.preHandle(request, response, handler);
}
//获取方法注解,方法检查是否需要验证权限控制
permission = handlerMethod.getMethod().getAnnotation(AuthorityValid.class);
if (permission != null && !permission.validate()) { //不需要验证权限
Parameter[] args = handlerMethod.getMethod().getParameters();
logger.info("参数:{}", args[0]);
return super.preHandle(request, response, handler);
}
// 权限判断,没有权限则跳转至无权限页面,有权限则走正常流程
logger.info("权限判断...");
}
return super.preHandle(request, response, handler);
}
}
(4)自动配置
@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {
@Bean
public AuthorityInterceptorAdapter getValidInterceptor() {
return new AuthorityInterceptorAdapter();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration addInterceptor = registry.addInterceptor(getValidInterceptor());
// 排除配置
addInterceptor.excludePathPatterns("/error");
addInterceptor.excludePathPatterns("/login**");
// 拦截配置
addInterceptor.addPathPatterns("/**");
}
}
发表评论
-
服务端推送multipart/x-mixed-replace
2023-12-07 15:26 414往网页分批推送数据:boundary=END,总头--> ... -
使用httpclient提交post请求
2020-08-22 08:35 480import org.apache.http.HttpEnt ... -
Groovy超强的Java动态计算能力
2020-06-25 09:03 694//Groovy超强的Java动态计算能力 groovy-2. ... -
bsh(BeanShell)动态执行java代码
2020-06-25 07:59 993import java.util.Date; /** * B ... -
延时任务处理订单超时方案
2020-05-23 16:05 1010JDK的延迟队列 方案是利用JDK自带的DelayQueue ... -
HttpsURLConnection
2020-04-29 10:51 860import java.net.URL; import jav ... -
Log4j的ConversionPattern参数的格式含义
2020-04-22 14:23 512Log4j的ConversionPattern参数的格式含义 ... -
thread 的join
2020-04-16 18:02 423java里面也有这个方法,Java Thread中, join ... -
GZIPOutputStream压缩文件
2020-04-16 17:52 793import java.io.BufferedReader; ... -
软引用SoftReference的使用
2020-04-16 15:48 586软引用SoftReference的使用 SoftRefere ... -
Fastjson
2020-04-15 14:53 406import java.util.ArrayList; imp ... -
6位随机数
2020-04-14 09:47 810import org.apache.commons.lang. ... -
Java加密和数字签名
2020-04-14 09:38 423Java加密和数字签名 消息摘要 这是一种与消息认证码结合使 ... -
DES加密、解密
2020-04-02 16:42 436import java.security.SecureRand ... -
Java利用 AES/ECB/PKCS5Padding 算法加解密
2020-04-02 11:19 1067对称加密、解密 import javax.crypto.Ci ... -
aspectj连接点
2018-12-13 15:55 603切点指示符 切点指示符 ... -
spring之AspectJ面向切面编程
2018-12-13 14:15 910spring之AspectJ面向切面编程 面向切面编程,实现 ... -
设计模式之策略模式
2018-05-30 21:17 561public class Person { priva ... -
使用反射将对象转Map
2018-05-27 17:33 731//使用反射将对象转Map<String, St ... -
设计模式之原型模式
2018-05-20 18:42 553/** * 原型设计模式:原型模式主要用于对象的复制 ...
相关推荐
配置 SpringMVC 拦截器,我们需要在 `springmvc-config.xml` 文件中添加以下内容: ```xml ... ... ``` 此外,还需要在 `web.xml` 文件中配置 SpringMVC 的前端控制器 DispatcherServlet: ```xml ...
3. 注册拦截器:将自定义的拦截器类添加到Spring容器,可以通过`@Component`注解实现,然后使用`@Autowired`和`@Order`注解注入到`HandlerMapping`的bean中,`@Order`用于设置拦截器的执行顺序。 4. 实现业务逻辑:...
- 使用Java配置时,可以通过`@EnableWebMvc` 注解启用Web MVC配置,并在`WebMvcConfigurer` 实现类中重写`addInterceptors()` 方法来注册拦截器。 3. **自定义拦截器**: - 自定义拦截器需要继承`...
SpringMVC 拦截器是 Spring MVC 框架中的一个重要组成部分,它允许开发者在控制器处理请求之前或之后执行自定义逻辑。拦截器可以用于实现登录检查、权限验证、日志记录、性能监控等多种功能。本文将详细介绍 ...
这通常在Spring配置类中完成,使用`@Configuration`和`@EnableWebMvc`注解,并且通过`addInterceptors()`方法将拦截器添加到`InterceptorRegistry`。 4. **配置拦截路径**:在注册拦截器时,需要指定拦截哪些URL。...
在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。它可以用来实现诸如权限验证、日志记录、性能统计、缓存控制等多种功能。在这个主题中,我们将深入...
本篇文章将深入探讨如何在Spring MVC中使用Interceptor拦截器。 首先,Interceptor的实现需要继承自`HandlerInterceptor`接口或者实现`HandlerInterceptorAdapter`适配器类,这两个类都包含三个核心方法: 1. `...
接着,在Spring MVC的配置文件(如:servlet-context.xml)中配置DispatcherServlet、视图解析器(如:InternalResourceViewResolver)以及Spring MVC的拦截器(如:HandlerInterceptorAdapter)。 MyBatis的配置...
首先,我们创建一个Spring拦截器需要实现HandlerInterceptor接口或继承HandlerInterceptorAdapter抽象类。以下是一个简单的拦截器示例: ```java import org.springframework.web.servlet.HandlerInterceptor; ...
1. 拦截器的注册:拦截器需要在SpringMVC配置中进行注册,通过`<mvc:interceptors>`标签或者在Java配置中使用`addInterceptors()`方法添加到拦截器链中。每个拦截器都有`preHandle()`, `postHandle()` 和 `...
在这个"SpringMVC拦截器"的实践中,我们将探讨如何实现一个用于登录验证的拦截器。 首先,我们需要创建一个自定义的拦截器类,该类需要继承自Spring MVC的`HandlerInterceptor`接口或实现`...
在Spring MVC的配置文件中,你需要使用`<mvc:interceptors>`标签来定义拦截器集合。每个拦截器可以由`<mvc:interceptor>`标签定义,并通过`<mvc:mapping>`指定其匹配的URL路径。 ```xml <!-- 配置自定义拦截器 --...
可以通过在控制器方法上使用`@RequestMapping`的`excludePatterns`属性来排除特定路径,或者在拦截器的`preHandle`方法中判断并决定是否继续执行。 总之,Spring MVC拦截器是构建Web应用时不可或缺的一个工具,它极...
在Spring MVC中,Interceptor(拦截器)是一种强大的机制,它允许开发者在请求处理前后执行自定义逻辑,而不必侵入到Controller代码中。本篇文章主要探讨了Interceptor的使用及其源码解析,帮助深入理解其工作原理。...
"SpringMVC-拦截除登陆外的其他请求"这一主题旨在教你如何配置Spring MVC拦截器,以便在用户未登录时阻止他们访问特定的URL,而允许已登录用户正常操作。下面我们将深入探讨这一主题。 1. **Spring MVC 拦截器基础*...
在Spring MVC中,拦截器接口由`HandlerInterceptor`定义,而`HandlerInterceptorAdapter`类则提供了一个适配器模式的默认实现,简化了拦截器的开发过程。`HandlerInterceptor`接口包含以下三个核心方法: 1. **`...
SpringMVC拦截器是Spring MVC框架中用于处理请求和响应之间的一种机制,它允许开发者在请求到达控制器之前或之后执行一些额外的操作。拦截器对于资源和权限管理至关重要,因为它们可以实现诸如登录检查、访问控制、...
Spring MVC的拦截器基于AOP(面向切面编程)原理,它们通过实现`HandlerInterceptor`接口或继承`HandlerInterceptorAdapter`抽象类来定义。拦截器链的概念使得多个拦截器可以按照特定顺序执行,每个拦截器都可以决定...
### Java实训教程知识点详解——SpringMVC拦截器 #### 一、SpringMVC概述与应用场景 SpringMVC作为Spring框架中的一个模块,主要用于构建Web应用。它是一个基于MVC(Model-View-Controller)设计模式的轻量级框架...
2. 使用Java配置:在`WebMvcConfigurer`接口的实现类中,使用`addInterceptors()`方法添加拦截器。 实际应用场景包括但不限于: 1. 权限验证:在请求处理前检查用户登录状态,未登录时重定向到登录页面。 2. 访问...