1.生成token是一个spring控制器
 基于项目和项目之间的调用秘钥生成之后放redis,两小时后失效

package com.csair.openapi.controller.basic;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import com.csair.openapi.basic.annotation.WEBApi;
import com.csair.openapi.qo.sub.TokenCredential;
import com.csair.openapi.vo.sub.TokenSuccess;@RestController
@RequestMapping("/credential")
public class TokenCredentialController {@Autowiredprivate RedisTemplate<String, String> redisTemplate;private Map<String, String> key = new HashMap<String, String>();@PostConstructpublic void init() {key.put("lps", "lrKvmMg3h9c8UQsvzDn0S4X");}@RequestMapping(value = "/getToken")@ResponseBody@WEBApipublic Object export(HttpServletRequest request,HttpServletResponse response,@RequestBody TokenCredential limitsAuthority) throws Exception {TokenSuccess tokenSuccess   =  new TokenSuccess();if (limitsAuthority!=null&&limitsAuthority.getAppid()!=null&&limitsAuthority.getSecret()!=null) {//校验用户是否有权限String appid= limitsAuthority.getAppid();String secretPass =(String) key.get(appid);String secret = limitsAuthority.getSecret();if (secret.equals(secretPass)) {String Timestamp= System.currentTimeMillis()+"";String token = md5Password(appid+secretPass+System.currentTimeMillis()+Timestamp);redisTemplate.opsForValue().set(token, Timestamp,7200, TimeUnit.SECONDS);//token和验证码对应的放到redis里面 ,2小时秒过期tokenSuccess.setAccess_token(token);tokenSuccess.setExpires_in("7200");return tokenSuccess;}else{throw new RuntimeException("invalid secret");           }}throw new RuntimeException("invalid appid");}/*** 生成32位md5码* @param password* @return*/public static String md5Password(String password) {try {// 得到一个信息摘要器MessageDigest digest = MessageDigest.getInstance("md5");byte[] result = digest.digest(password.getBytes());StringBuffer buffer = new StringBuffer();// 把每一个byte 做一个与运算 0xff;for (byte b : result) {// 与运算int number = b & 0xff;// 加盐String str = Integer.toHexString(number);if (str.length() == 1) {buffer.append("0");}buffer.append(str);}// 标准的md5加密后的结果return buffer.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();return "";}}}

2.用java自定义注解引入aop来鉴权

package com.csair.openapi.basic.annotation;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AuthToken {}
package com.csair.openapi.basic.aspect;import javax.servlet.http.HttpServletRequest;import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.Ordered;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;import com.csair.cocc.basic.constant.EnvironmentEnum;
import com.csair.openapi.basic.annotation.AuthToken;@Component
@Aspect
public class AuthTokenDecorator implements Ordered {private final Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Value("${environment}")private String environment;@Around("within(com.csair.**.controller.**.*) && @annotation(authToken)")public Object decorate(ProceedingJoinPoint pjp, AuthToken authToken) throws Throwable {if (EnvironmentEnum.DEV.getValue().equals(environment)) {//如果是开发环境return pjp.proceed();//这个是可以继续传输对象到Controller的逻辑}Object[] obj = pjp.getArgs();HttpServletRequest request = (HttpServletRequest) obj[0];String accessToken = request.getParameter("accessToken");logger.info("accessToken值為:"+accessToken);if (StringUtils.isEmpty(accessToken)) {throw new RuntimeException("token is null");     }else {String timestamp = redisTemplate.opsForValue().get(accessToken); if (StringUtils.isEmpty(timestamp)) {throw new RuntimeException("Invalid token");        }}return pjp.proceed();}public int getOrder() {return 9;}}

引用redis的配置!

​
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"><context:property-placeholder location="classpath:redis.properties" /><bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"><property name="maxTotal" value="5000" /><property name="maxIdle" value="2000" /><property name="maxWaitMillis" value="4000" /><property name="testOnBorrow" value="true" /><property name="testOnReturn" value="true" /><property name="testWhileIdle" value="true" /></bean><bean id="redisSentinelConfiguration"class="org.springframework.data.redis.connection.RedisSentinelConfiguration"><property name="master"><bean class="org.springframework.data.redis.connection.RedisNode"><property name="name" value="${redis.master.name}"></property></bean></property><property name="sentinels"><set><bean class="org.springframework.data.redis.connection.RedisNode"><constructor-arg name="host" value="${redis.sentinel1.host}"></constructor-arg><constructor-arg name="port" value="${redis.sentinel1.port}"></constructor-arg></bean><bean class="org.springframework.data.redis.connection.RedisNode"><constructor-arg name="host" value="${redis.sentinel2.host}"></constructor-arg><constructor-arg name="port" value="${redis.sentinel2.port}"></constructor-arg></bean><bean class="org.springframework.data.redis.connection.RedisNode"><constructor-arg name="host" value="${redis.sentinel3.host}"></constructor-arg><constructor-arg name="port" value="${redis.sentinel3.port}"></constructor-arg></bean></set></property></bean><bean id="jedisConnectionFactory"class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><property name="password" value="${redis.password}" /><property name="poolConfig" ref="jedisPoolConfig" /><constructor-arg ref="redisSentinelConfiguration" /></bean><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"><property name="connectionFactory" ref="jedisConnectionFactory" /><property name="keySerializer"><beanclass="org.springframework.data.redis.serializer.StringRedisSerializer" /></property><property name="valueSerializer"><beanclass="org.springframework.data.redis.serializer.StringRedisSerializer" /></property><property name="hashKeySerializer"><beanclass="org.springframework.data.redis.serializer.StringRedisSerializer" /></property><property name="hashValueSerializer"><beanclass="org.springframework.data.redis.serializer.StringRedisSerializer" /></property></bean></beans>​

最重要的是Controller的入参要加上HttpServletRequest request

@RequestMapping(value = "/saveCargoPlaneUploadLpsInfo", method = RequestMethod.POST)
    @ResponseBody
    @WEBApi
    @AuthToken
    public Object saveCargoPlaneUploadLpsInfo(HttpServletRequest request,@RequestBody CargoPlaneUploadLpsInfoDto param)

生成token和验证token机制相关推荐

  1. 【Flask项目2】生成token和验证token(11)

    用户登录 用户登录的功能我们使用 Json Web Token(JWT) 来为登录用户生成token令牌,并返回给客户端,客户端有了令牌之后,每次访问服务器,都携带Token,后台经过验证就能知道当前 ...

  2. jwt生成token和验证token以及获取playload的数据,实现token拦截

    jwt实现流程: 1.添加依赖: <dependency><groupId>com.auth0</groupId><artifactId>java-jw ...

  3. 利用GUID/UUID生成token及验证token的正确性

    本来有JWT这种生成token验证的强大工具,但有时考虑到项目的实际需求,会利用GUID/UUID来生成token,当然GUID/UUID能生成很多具有唯一性的验证结果,所以这里主要记录下GUID/U ...

  4. token登录验证机制

    jwt: json web token 数据 前端 秘钥 前端 请求数据的时候. 需要通过秘钥生成命令令牌. Token token是oAuth Token,提供的是认证和授权,认证针对用户,授权是针 ...

  5. java客户端发送token_基于token的会话保持机制

    python数据可视化数据分析与决策 63.2元 (需用券) 去购买 > session简介 做过Web开发的程序员应该对Session都比较熟悉,Session是一块保存在服务器端的内存空间, ...

  6. FLASK RESTFUL TOKEN用户验证笔记

    笔记1 REST要求无状态,可以理解为没有session,而且session的存储遇到分布式集群的情况就比较难搞,所以对于用户验证目前网上大多数做法是token方式,第一次登录的时候,先提交用户名密码 ...

  7. springboot+vue3.0+token 安全验证

    springboot+vue+token安全验证 目录 一.说明 二.后台(springboot) 1.添加依赖包 2.添加token工具类 3.创建拦截器 4.入口拦截 5.配置跨域 6.登录接口 ...

  8. Netty SocketIO如何在客户端发起链接时验证token是否合法?

    直接上代码: socketIOServer.addConnectListener(new ConnectListener() {public void onConnect(SocketIOClient ...

  9. java token生成和验证_Java Token登录验证 生成解析Token

    借鉴参考 Java Token登录验证 使用jjwt生成和解析JWT java基于token验证之登陆验证 等 什么是Token? 我的理解来说 token就是你访问服务器的口令,只要token合法, ...

最新文章

  1. It's Time to Say Goodbye (此刻告别)
  2. Idea(二) 解决IDEA卡顿问题及相关基本配置(转)
  3. apollo芯片_ADAS/AD主控芯片研究:集成趋势下的短板与变革
  4. 三十岁前不要去在乎的29件事
  5. gradle wrapper 版本与 android build tool 版本匹配要求
  6. CSU 1112 机器人的指令
  7. 挂服务器刷屏微信,谁知道微信群刷屏代码啊,跪求
  8. 描述羽毛针禾及其特殊结构——“根鞘”的词有哪些呢?已经做完的项目和目前羽毛针禾面临的科学问题有哪些?
  9. LabVIEW顺序结构
  10. 桌面上的图标不见了怎么办?小技能分享
  11. 几款优秀的文档管理系统
  12. 程序员修炼之道关键点总结和个人感悟
  13. c语言借助中间变量完成的作业,北京交通大学黄宇黄宇老师C语言第一次作业.doc...
  14. 总结了一套比较新的面试题挺全面的,多方面都有涉及到
  15. AD软件系统属性配置
  16. 安卓4.4.4安装哪个微信版本_安卓用户喜大普奔!安卓版微信7.0.13内测版发布,支持深色模式!...
  17. 如何启动播客以及播客需要准备什么
  18. java背单词软件_背单词的java小软件
  19. 爱上Axure之软件基础视频教程-昝磊-专题视频课程
  20. 初次使用github

热门文章

  1. JAVA程序填空题用公式求e_Java 使用对象 编程练习题
  2. Visual Studio 2013 不小心关掉“解决方案资源管理器”怎么办?
  3. php留言板的实验步骤,PHP实现基本留言板功能原理与步骤详解
  4. wps office 2005:不得不用的14绝技
  5. 在线文本编辑器(一)—FreeTextBox
  6. 互斥锁、临界区和事件
  7. 森林救火与计算机相关,无人机森林防火解决方案包含了哪些技术?
  8. 薛定谔 | 小分子叠合
  9. matlab:反三角函数
  10. Jarvis oj level3