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

简介: token、springcloud

因为要考虑服务端token的动态刷新,而且还要单独启动定时调度任务去刷新token信息,(企业架构源码可以加求球:叁五三陆二肆柒二伍玖)保证token的时效及安全问题,直接分享动态刷新token的代码:

@RestController  
@RequestMapping(value = "/rest/soa")  
public class SoaServiceResource {  
      
    private static final Logger logger = Logger.getLogger(SoaServiceResource.class);  
    @Autowired  
    private SoaAppSecretService soaAppSecretService;  
      
    /** 
     * 刷新应用token信息 
     * @param request 
     * @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<SoaAppSecret> 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);  
    }  
      
}  
目录
相关文章
|
2月前
|
缓存 弹性计算 API
用 Go 快速开发一个 RESTful API 服务
用 Go 快速开发一个 RESTful API 服务
|
9天前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
16天前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
34 2
|
1月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
18天前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
54 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
1月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
1月前
|
Go API 开发者
深入探讨:使用Go语言构建高性能RESTful API服务
在本文中,我们将探索Go语言在构建高效、可靠的RESTful API服务中的独特优势。通过实际案例分析,我们将展示Go如何通过其并发模型、简洁的语法和内置的http包,成为现代后端服务开发的有力工具。
|
2月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
2月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
2月前
|
JavaScript 安全 API
构建高效后端服务:RESTful API 设计与实现
【8月更文挑战第31天】在数字化时代,一个清晰、高效且安全的后端服务是应用程序成功的关键。本文将深入探讨如何设计并实现一个遵循REST原则的API,确保服务的可扩展性和维护性。我们将从基础概念出发,逐步引入真实代码示例,展示如何利用现代技术栈创建高性能的后端服务。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和实用的技巧。