import java.lang.annotation.*;
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface User {
}
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class UserInfo {
@ApiModelProperty(value = "用户id", hidden = true)
private String userId;
@ApiModelProperty(value = "账号id", hidden = true)
private String accountId;
@ApiModelProperty(value = "姓名", hidden = true)
private String name;
@ApiModelProperty(value = "部门id", hidden = true)
private String deptId;
@ApiModelProperty(value = "部门名称", hidden = true)
private String deptName;
@ApiModelProperty(value = "角色id", hidden = true)
private String roleIds;
}
import com.ciih.zjlst2.config.SecurityUtil;
import com.ciih.zjlst2.util.JwtTokenUtil;
import lombok.AllArgsConstructor;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
@Component
@AllArgsConstructor
public class RequestUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
private SecurityUtil securityUtil;
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return methodParameter.hasParameterAnnotation(User.class);
}
@Override
public UserInfo resolveArgument(MethodParameter methodParameter,
ModelAndViewContainer modelAndViewContainer,
NativeWebRequest nativeWebRequest,
WebDataBinderFactory webDataBinderFactory) {
HttpServletRequest request = ((ServletWebRequest) nativeWebRequest).getRequest();
String token = null;
token = request.getParameter("Authorization");
if (token == null) {
token = request.getHeader("Authorization");
}
if (token == null) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("Authorization".equals(cookie.getName())) {
token = cookie.getValue();
}
}
}
}
Assert.notNull(token, "未检测到token");
UserInfo userInfo = JwtTokenUtil.parseToken(token, UserInfo.class);
//这一步Activiti7需要
securityUtil.logInAs(userInfo.getUserId());
return userInfo;
}
}
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Resource
private SecurityUtil securityUtil;
@Override
protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
// 注册UserInfo的参数分解器
argumentResolvers.add(new RequestUserHandlerMethodArgumentResolver(securityUtil));
}