HandlerInterceptor 白名单
时间: 2023-11-03 11:18:59 浏览: 93
HandlerInterceptor 白名单是指在使用 Spring MVC 框架时,可以通过自定义拦截器(HandlerInterceptor)来限制访问权限。白名单是一种用于放行一些请求的机制,即对于白名单中的请求,不会触发拦截器的拦截逻辑,直接放行访问。
通常情况下,拦截器会对所有请求进行拦截,并根据一定的规则进行权限校验、日志记录、权限验证等操作。但有时候,我们可能需要对一些请求进行特殊处理,例如对一些静态资源文件或特定的接口进行放行,这就可以使用白名单来配置。
在 Spring MVC 中,我们可以通过实现 HandlerInterceptor 接口来自定义拦截器,并在配置文件中将其添加到拦截器链中。在拦截器的 preHandle 方法中,我们可以判断当前请求是否在白名单中,在白名单中的请求将被放行,不再执行后续的拦截器或处理器逻辑。
通过配置白名单,我们可以灵活地控制拦截器的应用范围,提高系统的性能和安全性。
相关问题
拦截器设置ip白名单
拦截器可以用来实现IP白名单的功能,具体步骤如下:
1. 创建一个拦截器类,实现HandlerInterceptor接口,并在preHandle方法中进行IP白名单校验。代码示例:
```java
public class IPWhiteListInterceptor implements HandlerInterceptor {
private List<String> whiteList = Arrays.asList("127.0.0.1", "192.168.0.1"); // IP白名单列表
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String ip = request.getRemoteAddr(); // 获取客户端IP地址
if (whiteList.contains(ip)) { // 如果客户端IP在白名单列表中,则放行
return true;
} else { // 否则返回403错误
response.sendError(HttpServletResponse.SC_FORBIDDEN, "IP地址不在白名单中");
return false;
}
}
}
```
2. 在WebMvcConfigurer的addInterceptors方法中注册拦截器,并指定拦截规则。代码示例:
```java
@Configuration
public class IPWhiteListWebMvcConfiguration implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new IPWhiteListInterceptor())
.addPathPatterns("/**"); // 拦截所有请求
}
}
```
3. 在需要进行IP白名单校验的Controller方法上添加自定义注解,并在拦截器中获取注解配置信息进行校验。代码示例:
```java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface IPWhiteList {
String[] value() default {}; // IP白名单列表
}
public class IPWhiteListInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
IPWhiteList annotation = handlerMethod.getMethodAnnotation(IPWhiteList.class);
if (annotation != null) { // 如果方法上有IPWhiteList注解,则进行IP白名单校验
String[] whiteList = annotation.value();
String ip = request.getRemoteAddr();
if (Arrays.asList(whiteList).contains(ip)) {
return true;
} else {
response.sendError(HttpServletResponse.SC_FORBIDDEN, "IP地址不在白名单中");
return false;
}
}
}
return true;
}
}
@RestController
public class UserController {
@GetMapping("/user")
@IPWhiteList({"127.0.0.1", "192.168.0.1"}) // 添加IPWhiteList注解
public String getUser() {
return "user";
}
}
```
springboot设施白名单跳过token校验
在Spring Boot中,可以通过配置白名单来跳过Token校验。下面是一种实现方式:
1. 创建一个拦截器类,用于拦截请求并进行Token校验。可以使用`HandlerInterceptor`接口来实现该类,并重写`preHandle`方法。
```java
public class TokenInterceptor implements HandlerInterceptor {
// 在请求处理之前进行拦截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 获取请求的URL
String requestUrl = request.getRequestURI();
// 定义白名单,即不需要进行Token校验的URL
List<String> whiteList = Arrays.asList("/login", "/register");
// 判断请求的URL是否在白名单中,如果在则跳过Token校验
if (whiteList.contains(requestUrl)) {
return true;
}
// 进行Token校验的逻辑代码
// ...
return true;
}
}
```
2. 在Spring Boot的配置类中注册该拦截器。
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 创建拦截器对象
TokenInterceptor tokenInterceptor = new TokenInterceptor();
// 注册拦截器,并指定拦截的URL路径
registry.addInterceptor(tokenInterceptor).addPathPatterns("/**");
}
}
```
在上述代码中,我们将`TokenInterceptor`拦截器注册到了Spring Boot的配置类`WebConfig`中,并指定了需要拦截的URL路径为"/**",即所有请求都会被该拦截器拦截。
同时,我们定义了一个白名单`whiteList`,其中包含了不需要进行Token校验的URL,例如登录和注册接口。在`preHandle`方法中,我们判断请求的URL是否在白名单中,如果在则直接返回true,跳过Token校验;否则,执行Token校验的逻辑代码。
注意:上述代码只是一种实现方式,具体根据你的项目需求进行调整。
阅读全文