Java 自定义注解实现后台获取当前登陆的用户信息

为什么需要在后台使用注解保存用户信息?

用户在前端页面进行一系列的操作,在请求后端接口时可能需要携带当前用户信息参数,这样的话前端也许要保存用户信息,不安全。在后端使用注解保存当前用户信息,安全方便。

1、核心代码
1.1、注解类

import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;

@Documented
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginStaff {
    String key() default "loginStaff";
}

1.2、方法参数解析器类

import java.util.Objects;
import com.baige.annotation.LoginStaff;

import org.springframework.core.MethodParameter;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;

public class LoginStaffResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.hasParameterAnnotation(LoginStaff.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container, NativeWebRequest request, WebDataBinderFactory factory) {
        LoginStaff staff = parameter.getParameterAnnotation(LoginStaff.class);
        return request.getAttribute(Objects.requireNonNull(staff).key(), NativeWebRequest.SCOPE_SESSION);
    }
}

1.3、配置类

import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;

@Configuration
public class LoginStaffConfigurer implements WebMvcConfigurer {

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(new LoginStaffResolver());
    }

    @Bean
    public LoginStaffResolver LoginStaffResolver(){
        return new LoginStaffResolver();
    }
}

2、注解的使用
在登录接口中往HttpSession中存放用户信息。

session.setAttribute("loginStaff", staff);

在需要使用注解的Controller接口方法参数添加@LoginStaff注解即可。

@PostMapping("/add")
public RequestResult add(@LoginStaff Staff staff) {}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring的后台Check注解是用于进行参数校验的,它可以用于控制器方法的参数上,用于校验参数的合法性。如果需要自定义Check注解,可以按照以下步骤进行操作: 1. 定义注解类型 ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) @Documented @Constraint(validatedBy = MyCheckValidator.class) // 自定义校验器 public @interface MyCheck { String message() default "参数校验不通过"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } ``` 2. 定义注解校验器 ```java public class MyCheckValidator implements ConstraintValidator<MyCheck, String> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { // 对value进行校验,校验通过返回true,否则返回false return value != null && value.startsWith("my"); } } ``` 3. 注册注解校验器 ```java @Configuration public class ValidatorConfig { @Autowired private Validator validator; @PostConstruct public void init() { ValidatorFactory validatorFactory = Validation.byDefaultProvider() .configure() .constraintValidatorFactory(new SpringConstraintValidatorFactory()) .buildValidatorFactory(); ValidatorContext validatorContext = validatorFactory.usingContext(); validatorContext.addConstraintValidator(MyCheck.class, new MyCheckValidator()); } } ``` 以上是自定义Check注解的步骤,其中需要注意的是,自定义注解需要使用@Constraint注解进行标注,并指定对应的校验器;校验器需要实现ConstraintValidator接口,并重写isValid方法进行参数校验;最后需要在配置类中注册自定义校验器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值