开发一个博客系统文章数:菜单文章都没更新完
搭建eureka注册中心 (请先阅读此文章) https://segmentfault.com/a/11...
搭建Beans编写Token解析注解 https://segmentfault.com/a/11...
搭建权限管理系统 https://segmentfault.com/a/11...
搭建后台管理系统 https://segmentfault.com/a/11...
前端Fetch请求封装 https://segmentfault.com/a/11...前端
1.建立一个maven的空项目,写本身的Entity和工具类在打包以后在其余项目中引入 就能够了;java
IDEA打包部署项目到maven
在Idea中的最右边的导航栏中能够看到一个Maven Projects,单击打开,如图所示:web
引入Beans项目到当前项目:
<dependency> <groupId>com.server</groupId> <artifactId>beans</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
编写Token解析注解(Token的字符串-解析为->为TokenEntity实体)
注解解析Token实例spring
TokenEntity实体 public class TokenEntity{ private String userId; private String token; private Date expiresDate; //过时时间 private Date createDate; //建立时间 public TokenEntity(String userId, String token, Date expiresDate, Date createDate) { this.userId = userId; this.token = token; this.expiresDate = expiresDate; this.createDate = createDate; } public TokenEntity() { super(); } get/set方法略
解析Token的工具类中的方法(此方法根据本身具体如何解析token来编写) public static Object getToken(String token,String key) throws Exception { DecodedJWT jwt = verifyToken(token,key); Map<String, Claim> map = jwt.getClaims(); TokenEntity bean = new TokenEntity(); bean.setUserId(map.get("userId").asString()); bean.setToken(token); bean.setExpiresDate(jwt.getIssuedAt()); bean.setCreateDate(jwt.getExpiresAt()); return bean; }
主要注解相关内容来了
注解类 import java.lang.annotation.*; @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestToken { String value(); }
解析类 import com.server.authority.util.TokenUtil; import com.server.config.SysBaseConfig; 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; public class RequestTokenAnalysis implements HandlerMethodArgumentResolver{ @Override public boolean supportsParameter(MethodParameter methodParameter) { return methodParameter.hasParameterAnnotation(RequestToken.class); } @Override public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception { RequestToken token = methodParameter.getParameterAnnotation(RequestToken.class); String value = token.value(); Class clazz = methodParameter.getParameterType(); String data = nativeWebRequest.getParameter(value); if (data == null) { return clazz.newInstance(); } Object object = TokenUtil.getToken(data, SysBaseConfig.TOKEN_KEY); return object; } }
测试注解类 @RequestMapping(value = "/token",method = RequestMethod.GET) @ResponseBody public TResponse userToken(@RequestToken(ParameterNames.ACCESS_TOKEN) TokenEntity token){ try{ return authorityService.userVerify(token.getToken()); }catch (Exception e){ return tResponse.getTResponse("oxs-pai-appMenu","zh_CN", e.getMessage(), SResponse.getInstance().getSResponse(StatusCode.USER_DEFINED,"异常")); } }
例如地址:http://127.0.0.1:8762/auth/token 请求头中添加:at=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MzI2NTI3MTIsInVzZXJJZCI6IjEiLCJpYXQiOjE1MzI1NjYzMTJ9.z1MweHILT6f2KeUumVSNuuY0F9EYsePQp5JmKJiwDuc
注入注解 import com.server.authority.annotation.RequestTokenAnalysis; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import java.util.List; @SpringBootApplication @EnableEurekaClient public class AuthorityApplication extends WebMvcConfigurerAdapter { public static void main(String[] args) { SpringApplication.run(AuthorityApplication.class, args); } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(new RequestTokenAnalysis()); super.addArgumentResolvers(argumentResolvers); } }
总结:可以成功解析出TokenEntity