基于SpringCloud+vue(ElementUI)+mySQL前后端分离设计之--搭建Beans编写Token解析注解

2018-10-13 admin

开发一个博客系统

文章数:菜单文章都没更新完 搭建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和工具类在打包之后在其他项目中引入 就可以了;

IDEA打包部署项目到maven

在Idea中的最右边的导航栏中可以看到一个Maven Projects,单击打开,如图所示: 图片描述

引入Beans项目到当前项目:

<dependency>
    <groupId>com.server</groupId>
    <artifactId>beans</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

编写Token解析注解(Token的字符串-解析为->为TokenEntity实体)

注解解析Token实例

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

原文链接:https://segmentfault.com/a/1190000016664082

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-42544.html

文章标题:基于SpringCloud+vue(ElementUI)+mySQL前后端分离设计之--搭建Beans编写Token解析注解

相关文章
前端交流QQ群
我们建立了一个前端交流QQ群供大家交流,有什么问题都可以在群里提问,欢迎你的加入,也希望我们大家能够在群里互帮互助,同时也能学到东西。 我们相信,前端有你更精彩! 为了让更多的小伙伴加入我们,欢迎大家转发扩散! 长按以上二维码加入我们 ...
2016-04-01
2014年最流行前端开发框架对比评测
如今,各种开发框架层出不穷,各有千秋。哪些是去年较受开发者关注的呢?前不久,云适配根据Github上的流行程度整理了2014年最受欢迎的6个前端开发框架,并进行对比说明,希望帮助有需要的朋友选择合适自己的前端框架。 1. Bootstrap...
2015-11-12
jQuery中DOM树操作之使用反向插入方法实例分析
本文实例讲述了jQuery中DOM树操作之使用反向插入方法。分享给大家供大家参考。具体分析如下: 使用反向插入方法 这里我们先把创建的内容插人到元素前面,然后再把同一个元素插人到文档 中的另一个位置。通常,当在jQuery中操作元素时,利用...
2015-11-13
Web前端开发与iOS终端开发的异同
毕业之前一直在做前端开发,毕业后就转成做iOS开发,这两者有很多挺有意思的对比,尝试写下我能想到的它们的一些相同点和不同点。 语言 前端和终端作为面向用户端的程序,有个共同特点:需要依赖用户机器的运行环境,所以开发语言基本上是没有选择的,...
2016-01-13
React Native 用JavaScript编写原生ios应用
ReactNative 可以基于目前大热的开源JavaScript库React.js来开发iOS和Android原生App。而且React Native已经用于生产环境——Facebook Groups iOS 应用就是基于它开发的。 Re...
2015-11-12
JavaScript游戏之连连看源码分享
JavaScript游戏之连连看源码 下载地址:JavaScript游戏之连连看源码 解压密码:www.javascriptcn.com ...
2015-11-12
ASP.NET 2.0 AJAX应用程序设计
ASP.NET Aiax技术是一种实现异步(Asynchronous)网络应用的技术,它被整合在ASP.NET 2.0之中,是As P.NET的一种扩展技术。通过ASENETAjax技术,开发人员或程序员可以将Web服务器控件和客户端脚本结...
2015-11-14
如何编写干净高效的CSS代码
其实CSS的学习并不困难,但在一些较为大型的项目中就显得杂乱无章,变得很难管理,尤其是不同的人编写CSS的风格总会略有不同,从团队合作的层面上来说,就更加难以沟通,所以,我们为此总结了一些如何实现高效整洁的CSS代码原则: 使用Reset但...
2015-11-12
vue.js实现请求数据的方法示例
vue2.0示例代码如下: var vm = new Vue({ el:&quot;#list&quot;, data:{ gridData: &quot;&quot;, }, ...
2017-03-20
前端MV*框架的意义
经常有人质疑,在前端搞MV有什么意义?也有人提出这样的疑问:以AngularJS,Knockout,BackBone为代表的MV框架,它跟jQuery这样的框架有什么区别?我jQuery用得好好的,有什么必要再引入这种框架? 回答这些问题之...
2016-03-11
回到顶部