package com.annotation; import java.lang.annotation.*; /** * 忽略Token验证 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface IgnoreAuth { }这是干什么的 详细说明
时间: 2024-01-24 17:18:32 浏览: 187
这是一个自定义注解,用于在方法上标记忽略Token验证。通常在使用Token进行身份验证的系统中,需要对用户进行身份验证以保护系统安全,但有时候也会有一些不需要进行身份验证的接口,比如一些公开的查询接口或者登录接口。在这种情况下,就可以使用这个自定义注解来标记这些接口,以便在进行身份验证时忽略这些接口。
具体来说,这个注解是通过@Target、@Retention和@Documented三个元注解来定义的。@Target注解指定了这个注解可以被应用在方法上,@Retention注解指定了这个注解在运行时保留,@Documented注解指定了这个注解将会被包含在JavaDoc中。这样一来,当我们在编写代码时,就可以在需要忽略Token验证的方法上添加@IgnoreAuth注解,以便在进行身份验证时忽略这些方法。
相关问题
spring security怎么通过自定义注解+aop实现配置指定接口不用token就能访问
要通过自定义注解和AOP来实现Spring Security配置指定接口不需要Token才能访问,可以按照以下步骤进行操作:
1. 创建一个自定义注解,例如`@NoTokenRequired`,用于标识不需要Token的接口。
```java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoTokenRequired {
}
```
2. 创建一个切面类,用于拦截带有`@NoTokenRequired`注解的方法,并跳过Spring Security的Token验证。
```java
@Aspect
@Component
public class TokenValidationAspect {
@Before("@annotation(com.example.NoTokenRequired)")
public void skipTokenValidation(JoinPoint joinPoint) {
// 跳过Spring Security的Token验证逻辑
SecurityContextHolder.getContext().setAuthentication(null);
}
}
```
3. 配置Spring Security,将AOP切面类添加到Spring Security的配置中。
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private TokenValidationAspect tokenValidationAspect;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
// 配置需要Token验证的接口
.anyRequest().authenticated()
.and()
.csrf().disable();
// 将AOP切面类添加到Spring Security的配置中
http.addFilterBefore(tokenValidationAspect, UsernamePasswordAuthenticationFilter.class);
}
}
```
4. 在需要不需要Token验证的接口上,添加`@NoTokenRequired`注解。
```java
@RestController
public class ExampleController {
@NoTokenRequired
@GetMapping("/example")
public String example() {
return "This API does not require Token";
}
}
```
这样配置之后,带有`@NoTokenRequired`注解的接口将不会进行Spring Security的Token验证,即可在没有Token的情况下访问该接口。其他接口仍然需要进行Token验证。
java 自定义切面校验请求头
以下是Java自定义切面校验请求头的示例:
1. 创建自定义注解
```java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckHeader {
String value() default "";
}
```
2. 创建切面类
```java
@Aspect
@Component
public class CheckHeaderAspect {
@Autowired
private HttpServletRequest request;
@Around("@annotation(checkHeader)")
public Object checkHeader(ProceedingJoinPoint joinPoint, CheckHeader checkHeader) throws Throwable {
String headerValue = request.getHeader(checkHeader.value());
if (StringUtils.isBlank(headerValue)) {
throw new RuntimeException("请求头" + checkHeader.value() + "不能为空");
}
return joinPoint.proceed();
}
}
```
3. 在Controller层方法上使用自定义注解
```java
@RestController
public class TestController {
@GetMapping("/test")
@CheckHeader("token")
public String test() {
return "success";
}
}
```
在上述示例中,我们创建了一个名为CheckHeader的自定义注解,用于标注需要校验的请求头。然后,我们创建了一个名为CheckHeaderAspect的切面类,用于在请求方法执行前校验请求头。最后,在Controller层的test方法上使用了CheckHeader注解,表示需要校验token请求头。
阅读全文