SOA中springmvc中restful服务动态刷新token信息

因为要考虑服务端token的动态刷新,而且还要单独启动定时调度任务去刷新token信息,保证token的时效及安全问题,直接分享动态刷新token的代码:

Java代码

@CrossOrigin(origins = "*", maxAge = 3600,methods={RequestMethod.GET,RequestMethod.POST,RequestMethod.DELETE,RequestMethod.PUT})

@RestController

@RequestMapping(value = "/rest/soa")

public class SoaServiceResource {

private static final Logger logger = Logger.getLogger(SoaServiceResource.class);

@Autowired

private SoaAppSecretService soaAppSecretService;

/**

* 刷新应用token信息

*@paramrequest

* @param response

* @return

*/

@RequestMapping(value = "/refAppSecret", method = RequestMethod.GET)

public ResponseVO refAppSecret(@RequestParam(required=false) String appname, HttpServletRequest request, HttpServletResponse response){

try {

if(StringUtils.isEmpty(appname)){

return SoaResponseCode.buildEnumResponseVO(SoaServiceEnum.APPNAME_NOT_NULL, null);

}

//根据应用名获取秘钥信息

SoaAppSecret appSecret = soaAppSecretService.findAppSecretByAppName(appname);

if(null == appSecret){

return SoaResponseCode.buildEnumResponseVO(SoaServiceEnum.APPNAME_NOT_EXIST, null);

}

String appsecret = appSecret.getAppsecret();

if(StringUtils.isNotEmpty(appsecret)){

long afterTime = DateUtils.getAfterTime(new Date());

String token = EncryptUtil2.encryptToAES(EncryptUtil2.AESKey,  appname + EncryptUtil2.CONNECTOR + appsecret + EncryptUtil2.CONNECTOR + afterTime);

SoaAppSecret soaAppSecret = new SoaAppSecret();

soaAppSecret.setToken(token);

soaAppSecret.setAppname(appname);

soaAppSecret.setUpdateDate(new Date());

soaAppSecretService.refAppSecret(soaAppSecret);

JSONObject data = new JSONObject();

data.put("token", token);

return SoaResponseCode.buildEnumResponseVO(SoaServiceEnum.REQUEST_SUCCESS, data);

}

return SoaResponseCode.buildEnumResponseVO(SoaServiceEnum.APPSECRET_NOT_EXIST, null);

} catch (Exception e) {

logger.error("SoaServiceResource >> refAppSecret >> Exception " + e.getMessage());

return SoaResponseCode.buildEnumResponseVO(SoaServiceEnum.SYSTEM_ERROR, null);

}

}

/**

* 批量刷新应用秘钥信息

* @param request

* @param response

* @return

*/

@RequestMapping(value = "/batchRefAppSecret", method = RequestMethod.GET)

public ResponseVO batchRefAppSecret(HttpServletRequest request, HttpServletResponse response){

List appSecretList = soaAppSecretService.findList(new SoaAppSecret());

if(null != appSecretList && appSecretList.size() > 0){

for(SoaAppSecret soaAppSecret : appSecretList){

try {

String appsecret = soaAppSecret.getAppsecret();

if(StringUtils.isNotEmpty(appsecret)){

long afterTime = DateUtils.getAfterTime(new Date());

String token = EncryptUtil2.encryptToAES(EncryptUtil2.AESKey,  soaAppSecret.getAppname() + EncryptUtil2.CONNECTOR + appsecret + EncryptUtil2.CONNECTOR + afterTime);

soaAppSecret.setToken(token);

soaAppSecret.setUpdateDate(new Date());

soaAppSecretService.refAppSecret(soaAppSecret);

JSONObject data = new JSONObject();

data.put("token", token);

return SoaResponseCode.buildEnumResponseVO(SoaServiceEnum.REQUEST_SUCCESS, data);

}

logger.info("SoaServiceResource >> batchRefAppSecret >> 刷新应用秘钥信息成功,应用名: " + soaAppSecret.getAppname() + ",新的token信息: " + soaAppSecret.getToken() );

return SoaResponseCode.buildEnumResponseVO(SoaServiceEnum.APPSECRET_NOT_EXIST, null);

} catch (Exception e) {

logger.error("SoaServiceResource >> batchRefAppSecret >> Exception " + e.getMessage());

}

}

}

return SoaResponseCode.buildEnumResponseVO(SoaServiceEnum.REQUEST_SUCCESS, true);

}

/**

* 获取应用token

* @param request

* @param response

* @return

*/

@RequestMapping(value = "/findAppSecret", method = RequestMethod.GET)

public ResponseVO findAppSecret(@RequestParam(required=false) String appname, HttpServletRequest request, HttpServletResponse response){

if(StringUtils.isEmpty(appname)){

return SoaResponseCode.buildEnumResponseVO(SoaServiceEnum.APPNAME_NOT_NULL, null);

}

SoaAppSecret appSecret = soaAppSecretService.findAppSecretByAppName(appname);

if(null == appSecret){

return SoaResponseCode.buildEnumResponseVO(SoaServiceEnum.APPNAME_NOT_EXIST, null);

}

JSONObject data = new JSONObject();

data.put("token", appSecret.getToken());

return SoaResponseCode.buildEnumResponseVO(SoaServiceEnum.REQUEST_SUCCESS, data);

}

}

愿意了解框架技术或者源码的朋友直接求求交流分享技术:3133806896

分布式的一些解决方案,有愿意了解的朋友可以找我们团队探讨

更多详细源码参考来源

时间: 2024-10-08 17:27:32

SOA中springmvc中restful服务动态刷新token信息的相关文章

SOA中springmvc中restful服务的数据权限加密方式分享

restful中数据权限加密方式有很多种,特别是针对于request json的方式加密,这里详细介绍了SOA中针对于get.post数据加密方式,保证数据传输中的安全性: Java代码 @Component("dataSignInterceptor") publicclass DataSignInterceptorimplements MethodInterceptor { @Autowired private SoaServiceConfigService soaServiceCo

总结本次实训中springMVC中常用的注解@,以后用到别的会持续更新

@Repository //dao层注解.声明本层为dao层. @serivce //service层. @controller //con层. @autowired //声明自动创建对象.spring ioc @Required(一个效果) @RequestMapping(value="/定义的请求的名字",method=RequestMethod.Get/Post) //声明请求的方式,请求名字@responseBody //一般用户ajax请求方法的注解,使用后,不会使该方法的返

006 使用SpringMVC开发restful API四--用户信息的修复与删除,重在注解的定义

一:任务 1.任务 常用的验证注解 自定义返回消息 自定义校验注解 二:Hibernate Validator 1.常见的校验注解 2.程序 测试类 1 /** 2 * @throws Exception 3 * 更新程序,主要是校验程序的验证 4 * 5 */ 6 @Test 7 public void whenUpdateSuccess() throws Exception { 8 //JDK1.8的特性 9 Date date=new Date(LocalDateTime.now().pl

使用Spring RestTemplate解析RESTful服务

在上一篇"使用Spring MVC 4构建Restful服务"博文中,我们谈到了如何使用Spring MVC 4搭建RESTful服务,本文以上篇文章为基础,继续讲解如何解析Spring RESTful服务.上篇文章中,我们用了jacson包进行Java对象的序列化,本文仍然使用此包进行Java对象的反序列化. 构建RESTful服务 1.我们继续在 FavRestfulController 类中,新增 buildRestUser() 方法,将FavUser对象序列化成JSON对象输出

rpm 查询服务包的信息

1 概述 工作中,可能需要看到服务包的信息,决定安装或者卸载.一般可以通过以下语句进行查看 which ifconfig   查看命令的执行文件放在哪里 rpm -qf /sbin/ifconfig rpm -q --whatprovides /sbin/ifconfig    两条命令一样的效果通过执行文件完整路径查看是由哪个服务包提供的 结果得到包    net-tools-1.60-110.el6_2.i686 rpm -qi net-tools   //查看服务包的信息 rpm -qc

手机APP中使用Restful服务

REpresentational State Transfer (REST) 是一种架构原则,其中将 web 服务视为资源,可以由其 URL 唯一标识.RESTful Web 服务的关键特点是明确使用 HTTP 方法来表示不同的操作的调用. REST 的基本设计原则对典型 CRUD 操作使用 HTTP 协议方法: POST - 创建资源 GET - 检索资源 PUT – 更新资源 DELETE - 删除资源 REST 服务的主要优势在于: 它们是跨平台 (Java..net.PHP 等)高度可重

在ASP.NET Core Web API中为RESTful服务增加对HAL的支持

HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务端接口的耦合度.很多当今流行的RESTful API开发框架,包括Spring REST,也都默认支持HAL规范,当RESTful API被调用后,服务端就会返回ContentType为application/hal+json的JSON内容,例如: { "_links": { "

maven+SpringMVC搭建RESTful后端服务框架

今天来尝试一下搭建基于SpringMVC的RESTful标准的后端服务. 首先,什么是MVC?M-model,模型,指业务数据层,具体一点就是业务逻辑与数据库的交互:V-view,视图,用来展示数据,传统SpringMVC中控制器有返回类型ModelAndView,即返回含有数据模型与页面视图的jsp文件:C-controller,控制器,通常负责处理与用户间的交互,控制从数据库取数与返回结果到用户等. 那么,什么是REST风格的服务呢?REST(Representational State T

从经典架构项目中透析微服务架构的核心概念和充血模型

微服务架构和SOA区别 微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢? 我们先看相同点: 需要Registry,实现动态的服务注册发现机制:需要考虑分布式下面的事务一致性,CAP原则下,两段式提交不能保证性能,事务补偿机制需要考虑:同步调用还是异步消息传递,如何保证消息可靠性?SOA由ESB来集成所有的消息:都需要统一的Gateway来汇