springboot自定义参数注解LoginUser

使用参数注解获取登录用户,使你的代码更加优雅:

1、自定义注解需要实现解析器HandlerMethodArgumentResolver,实现两个方法。

@Component
@Slf4j
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
    @Autowired
	private LoginService loginService;
    
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.getParameterType().isAssignableFrom(User.class) && parameter.hasParameterAnnotation(LoginUser.class);
    }
    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
        	Long cUserId=(Long) request.getAttribute(Constants.CURRENT_USER_ID,RequestAttributes.SCOPE_REQUEST);
        	 if (cUserId>0) {
        	      //从数据库中查询并返回
                  User user = loginService.getUserById(cUserId);
                  if(user == null) {
        	          throw new RuntimeException(i18nService.getMessage("user.not.exist"));
                  }
                  return user;
        	 }
     }
}

2、设定User的实体类

@Data
public class User extends BaseObject {
	private Integer id;
	private String username;
	private String mobile;
}

3、自定义注解LoginUser,设定Target使注解的作用目标范围为方法参数,设定Retention使注解的有效范围为(注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在)

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUser {
}

4、方法中直接通过注解使用登录用户信息

    @PostMapping("saveServiceInfo")
    public ResponseResult saveServiceInfo(@LoginUser User loginUser) {
        // 直接可以使用LoginUser 注解获取人员信息
        loginUser.getUsername();
    }

5、参数注解完成,代码是不是显得比较优雅了。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值