java登录注解_自定义注解获取当前登录用户

在做项目的时候,我们经常会用到当前登录的用户,获取这个用户相关的信息,总是用User user = session.getAttribute("user"); 这个写的次数太多,还要获取session实在太费事,能不能简单,实用呢?

今天,我们就来探讨,注解实现参数解析,放在session中;

1.首先,我们创建一个自己的自定义注解;

import java.lang.annotation.Documented;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target({ElementType.PARAMETER})

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface SA {

}

解释下:@Target({ElementType.PARAMETER})  这个是元注解(用来定义注解的注解称为元注解),它的意思是这个注解是一个注解参数的注解;

@Retention(RetentionPolicy.RUNTIME)  这个意思是:在java代码编译时,jvm运行时都会存在;

@Documented  它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中;这个解释我也没仔细研究过,但是你想仔细研究的话可以去查查,这里不再阐述;

2.写好以上注解后,我们还要解析下这个注解,是用来做什么的,该类实现spring的HandlerMethodArgumentResolver;

import org.springframework.core.MethodParameter;

import org.springframework.web.bind.support.WebDataBinderFactory;

import org.springframework.web.context.request.NativeWebRequest;

import org.springframework.web.method.support.HandlerMethodArgumentResolver;

import org.springframework.web.method.support.ModelAndViewContainer;

import com.look.sys.bind.annotation.SA;

public class SaResolver implements HandlerMethodArgumentResolver {

@Override

public boolean supportsParameter(MethodParameter parameter) {

return parameter.hasParameterAnnotation(SA.class);

}

@Override

public Object resolveArgument(MethodParameter p, ModelAndViewContainer mavContainer,

NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

return webRequest.getAttribute(p.getParameterName(), NativeWebRequest.SCOPE_SESSION);

}

}

解释下: supportsParameter  这个方法返回boolean  值,如果是true,就是如果这个注解被用到,就继续执行下面的resolveArgument,把session值放在SA注解中;

HandlerMethodArgumentResolver  看到名称我们也就知道这个是处理方法参数的解析器;

3.把自己的注解解析器交给spring容器进行管理;

到这里我们,就把注解@SA 写好,并解析了,那么怎么用呢?

4.写在controller里

@RequestMapping("/")

public String index(@SA User user,HttpServletRequest request, Integer type) {

Stirng userId = user.getUserId();//获取userId

......省略XXXX

}

如果你觉得这种方法,好用,可以尝试下;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值