因为要考虑服务端token的动态刷新,而且还要单独启动定时调度任务去刷新token信息,保证token的时效及安全问题,直接分享动态刷新token的代码:(企业架构源码可以加求球:三五三六二四七二五九)
- @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信息
- * @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);
- }
- }
相关推荐
本项目利用了SpringMVC作为控制器层,Hibernate作为持久层,通过RESTful API提供服务,实现了数据的CRUD操作。下面我们将详细探讨这些知识点。 1. **SpringMVC**:Spring MVC是Spring框架的一个模块,它提供了模型-...
【标题】中的“SpringMVC精品资源--整合JWT,spring,springMVC,实现基于token验证”是一个关于使用Spring框架,特别是SpringMVC,与JSON Web Tokens (JWT)集成的教程或项目。这个主题涉及了现代Web应用中常见的...
这是一个基于SpringMVC、MongoDB、FreeMarker和API Token构建的开源内容管理系统,适用于Web开发,特别是毕业设计项目。下面将详细介绍这些技术栈及其在系统中的应用。 **SpringMVC**: SpringMVC是Spring框架的一...
SpringMVC是一个强大的Java web开发框架,用于处理HTTP请求和响应。在现代Web应用程序中,数据交换经常以JSON(JavaScript Object Notation)...通过理解和正确使用这些组件,可以构建高效、可维护的RESTful Web服务。
开发过程中,需要理解GATT(Generic Attribute Profile)服务和特性,以及如何通过蓝牙API进行设备扫描、连接、读写操作。 3. **SpringMVC**:这是一个Java Web开发框架,用于后端服务器的开发。SpringMVC处理...
在文件名称列表“ssm”中,SSM通常代表Spring、SpringMVC和MyBatis的组合,这是一个常见的Java Web开发栈。MyBatis是一个持久层框架,它简化了数据库操作,将SQL语句与Java代码直接关联起来。 总结来说,这个压缩包...
JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个JSON对象。这个信息可以被验证和信任,因为它是数字签名的。在本示例中,我们将讨论如何将...
在实践中,通过With-SpringMVC-building-secure-site这个项目,你可以学习到如何配置SpringMVC和MyBatis的整合,创建RESTful API,实现登录注册功能,处理HTTP请求,以及如何设置安全策略等。通过这些步骤,你将能够...
基于SpringBoot 2.0,SpringMVC,Mybatis,mybatis-plus,motan/dubbo分布式,Redis缓存,Shiro权限管理,redis管理Session,Quartz分布式集群调度,Restful服务;系统管理:包括用户管理、权限管理、数据字典、系统...
主要是第三方授权后自动刷新token,然后获取微信预授权码。是maven+SpringmVC+Mybaties+Redies+MongonDB+MySQL开发项目。主要有后天和前台IOS端接口。依赖于Springmvc Restful风格URL。总共有3个Maven web项目,...
文档可能涵盖了授权码(Authorization Code)流、密码(Resource Owner Password Credentials)流、刷新令牌(Refresh Token)等授权类型。 2. **oauth2.0 服务端和客户端代码jar包.rar**: 这个RAR文件包含服务端...
Spring Boot 提供了对 Spring Data JPA 和 MyBatis 的支持,可以方便地进行数据查询和分页处理,同时展示如何设计 RESTful API 来提供服务。 3. **183-springboot实战-头条发布和登录保护拦截器.mp4** 视频内容...
6. **安全机制**:在设计中需考虑用户隐私保护和数据安全,例如采用HTTPS协议保证数据传输安全,使用JWT(Json Web Token)进行用户身份验证,以及对敏感信息加密存储等。 7. **用户体验优化**:在小程序界面设计上...
4. JWT(JSON Web Token):用于身份验证和信息传输,保证通信过程中的数据完整性。 5. Docker容器化:利用Docker进行应用部署,实现环境的一致性和可移植性。 总的来说,"基于SSM+Vue的荆州理工职业学院信息系统...
JWT允许信息在不同服务之间安全传输,而无需在每个请求中携带会话信息。 7. **测试与部署**: 开发完成后,需要进行单元测试、集成测试和性能测试,确保系统的稳定性和效率。部署方面,通常会将Java后端应用部署在...
总的来说,"基于SpringBoot的大学生就业服务平台"项目结合了现代Web开发技术与移动互联网的优势,打造了一个集信息查询、求职互动于一体的高效就业服务平台。它的成功实施不仅体现了SpringBoot、SSM和微信小程序的...
在本项目中,SpringBoot可能被用来快速搭建后端服务,提供RESTful API供前端调用。 5. **微信小程序**:如果项目标签中提及的“微信小程序”是实际使用的,那么这个系统可能还包括微信小程序的开发,以便用户可以...
在实际运行中,贝立立城市货运服务系统利用GPS定位技术,实时追踪货物位置,为用户提供准确的货物运输信息。同时,系统还具备智能调度算法,根据货物体积、重量、目的地等因素,合理分配运力资源,提高运输效率。 ...
虽然标题中提到SSM,但在SpringBoot中,通常使用SpringBoot自身的Web和DataJpa模块,而不再需要单独引入SpringMVC。然而,可能在项目中使用了MyBatis作为ORM(对象关系映射)工具,帮助Java代码与数据库进行交互。 ...
在当今信息化社会,家政服务行业的管理系统已经成为提升服务质量、优化业务流程的重要工具。本项目“基于SpringBoot的家政服务管理平台”结合了现代Web开发技术和家政服务业务需求,旨在构建一个高效、便捷的管理...