当前位置: 首页 > news >正文

做网站空间哪个好seo中文意思是

做网站空间哪个好,seo中文意思是,赤峰政府门户网站建设相关制度,怎么做bbs网站项目场景: SpringBoot拦截器获取token用户对象优雅地传递到Controller层 问题描述 后端有许多接口都需要请求中携带有正确的Token,这时采用拦截器来验证token,但是每个接口都还是需要解析一遍token,浪费资源,不免显得…

项目场景:

SpringBoot拦截器获取token用户对象优雅地传递到Controller层


问题描述

后端有许多接口都需要请求中携带有正确的Token,这时采用拦截器来验证token,但是每个接口都还是需要解析一遍token,浪费资源,不免显得代码繁琐,臃肿。


解决方案:

我们可以把用户信息存储起来,方便其它地方获取,两种方式:

  1. 使用ThreadLocal线程存储(推荐)
  2. 存储到上下文中request.setAttribute

1、自定义拦截器Interceptor

抛出的异常需要自己捕捉,返回

package com.test.aop;import com.test.entity.TokenUserInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Token拦截器*/
@Component
@Slf4j
public class TokenInterceptor implements HandlerInterceptor {/*** 存储用户信息*/private static ThreadLocal<TokenUserInfo> userThread = new ThreadLocal<>();@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 从header中获取tokenString token = request.getHeader(CommonConstant.ACCESS_TOKEN);// 如果参数中不存在token,则报错if (StringUtils.isBlank(token)) {throw new RuntimeException("请求头缺少token参数");}try {// TODO 根据token获取用户信息// ......}catch (Exception e){log.error("获取用户信息失败:", e);throw new RuntimeException("获取用户信息失败");}//模拟已经获取到了用户信息TokenUserInfo tokenUserInfo = new TokenUserInfo();tokenUserInfo.setUserId("1227086153ef415896da5819d4fb4c2f");tokenUserInfo.setLoginAccount("test");tokenUserInfo.setLoginUserName("测试");//token失效if(tokenUserInfo == null){throw new RuntimeException("token失效");}/** 存储用户信息方便其它地方获取,两种方式* 1.使用ThreadLocal线程存储(推荐)* 2.存储到上下文中request.setAttribute*/// 放入线程域userThread.set(tokenUserInfo);//2.存储到上下文中request.setAttribute
//        request.setAttribute("tokenUserInfo",tokenUserInfo);//放行return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {//程序运行结束之后,删除线程,防止内存泄漏userThread.remove();}public static TokenUserInfo getUser() {return userThread.get();}}

用户实体类

package com.test.entity;import lombok.Data;/*** 用户信息**/
@Data
public class TokenUserInfo {/*** 用户id*/private String userId;/*** 登录帐号*/private String loginAccount;/*** 用户名*/private String loginUserName;
}

2、配置拦截器

package com.test.config;import com.test.aop.TokenInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;/*** WebMvc配置*/
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {/*** 解决跨域问题*/@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").maxAge(3600);}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");registry.addResourceHandler("/swagger/**").addResourceLocations("classpath:/static/swagger/");registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");}@Resourceprivate TokenInterceptor tokenInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//不拦截的地址List<String> excludedList = new ArrayList<>();//swagger地址excludedList.add("/swagger-ui.html");excludedList.add("/swagger-ui.html/**");excludedList.add("/webjars/**");excludedList.add("/swagger/**");excludedList.add("/doc.html");excludedList.add("/doc.html/**");excludedList.add("/swagger-resources/**");excludedList.add("/v2/**");excludedList.add("/favicon.ico");registry.addInterceptor(tokenInterceptor).addPathPatterns("/**")//拦截所有请求.excludePathPatterns(excludedList);//排除的请求super.addInterceptors(registry);}
}

 3、Controller层获取

package com.test.controller;import com.test.aop.TokenInterceptor;
import com.test.entity.TokenUserInfo;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;@RestController
@Api(tags = "测试接口")
@RequestMapping("/test")
public class TestController {@RequestMapping(value = "/get", method = RequestMethod.GET)public String get(HttpServletRequest request) {/** 优雅的获取用户信息,两种方式* 1.使用ThreadLocal线程存储(推荐)* 2.存储到上下文中request.setAttribute*/TokenUserInfo tokenUserInfo = TokenInterceptor.getUser();
//		TokenUserInfo tokenUserInfo = (TokenUserInfo) request.getAttribute(CommonConstant.USER_INFO);return "success";}
}

参考源码:https://download.csdn.net/download/u011974797/85849196

http://www.15wanjia.com/news/30844.html

相关文章:

  • 青少年心理建设网站今日头条最新消息
  • 小程序开发公司哪家济南seo小黑seo
  • 长宁区网站建设网站制用html制作个人网页
  • 手机网站需要什么百度里面的站长工具怎么取消
  • 海南医院网站建设成都seo优化排名推广
  • 化妆品网站设计方案国际购物网站平台有哪些
  • 做seo排名好的网站青岛网站设计制作
  • 建筑公司做网站的好处推广有奖励的app平台
  • 盘锦做网站选哪家引流推广犯法吗
  • 网站头部导航样式雅虎搜索引擎中文版
  • 做网站的骗术应用商店app下载
  • b2b网站快速做百度权重企业qq怎么申请
  • 婚恋网站哪家做的最好北京正规seo搜索引擎优化价格
  • 平台网站建设sem搜索引擎营销是什么
  • 投资者网站建设百度搜索简洁版网址
  • xampp做的网站能搜索吗营销网站有哪些
  • 网站地图怎样做上海网站设计
  • 想要做个公司网站深圳seo博客
  • wordpress百度收录插件seo关键字优化
  • 武汉建网公司网站建设网上推广的平台有哪些
  • 局网站建设方案word搜索引擎的营销方法有哪些
  • 建一个个人网站多少钱搜狗站长平台验证不了
  • 苏州网站设计哪家公司好今日最近的新闻大事10条
  • 325建筑人才网招聘企业seo网站营销推广
  • 机关网站源码google搜索下载
  • wordpress列表加载更多重庆seo俱乐部
  • 成都 视频网站建设360优化大师最新版的功能
  • 大连网站开发乛薇百度问一问人工客服怎么联系
  • 网站动态维护客服店铺推广方式有哪些
  • 潍坊网站建设服务商seo自学网官方