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

宁波网站制作联系方式郑州网站关键词优化外包

宁波网站制作联系方式,郑州网站关键词优化外包,做网站的公司哪些靠谱,济南营销型网站建设公司1. 什么是Token? 身份验证令牌(Authentication Token):在身份验证过程中,“token” 可以表示一个包含用户身份信息的令牌。 例如 Token(JWT)是一种常见的身份验证令牌,它包含用户的…

1. 什么是Token?

在这里插入图片描述

身份验证令牌(Authentication Token):在身份验证过程中,“token”
可以表示一个包含用户身份信息的令牌。

例如

  1. Token(JWT)是一种常见的身份验证令牌,它包含用户的身份信息(例如用户名或用户ID)以及其他相关信息,如权限或过期时间。
  2. 无意义令牌token,这种一般在获取后通过nosql查询token对应的用户信息。

当然,设计token网上大多有现成的解决方案,但是通过token如何拿个人信息呢?

2. 如何优雅的获取用户信息?

虽然token是用户凭证,但是在后端中,token是不能直接和数据进行交互的,我们需要转换成token用户信息。

解决思路:

我们大多会在过滤器filter进行token检验,在这里我们已经已经从header中解析并且验证了token了。如果我们要是再在Controller中获取header,在解决,感觉一点也不优雅。
在这里插入图片描述
我们的两种解决方案:

  1. 通过header进行解析(推荐):

哈哈哈,没想到我们还是从这种low的方法里弄的吧。 实际上nosql性能很不错,再查一次也无伤大雅,并且这种方式耦合度较低,符合代码规范。

我们可以通过注解的方式,可以尽量美观很多
1.1. 创建CurrentUserUuid接口

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface CurrentUserUuid {
}

1.2. 创建oginUserHandlerMethodArgumentResolver解析器
在这里插入图片描述

@Component
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {@Resourceprivate TokenUtil tokenUtil;@Overridepublic boolean supportsParameter(MethodParameter parameter) {return parameter.hasParameterAnnotation(CurrentUserUuid.class) &&parameter.getParameterType().isAssignableFrom(String.class);}@Overridepublic Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,NativeWebRequest request, WebDataBinderFactory factory) {// header中获取用户tokenString token = request.getHeader("Authorization");// TODO 根据userId获取User信息,这里省略,直接创建一个User对象。return tokenUtil.getUserToken(token);}
}
  1. 过滤器二次封装请求体

我们可以在第一次过滤器查的时候,把对应的信息封装到请求中,但是请求多变,get,post参数一般在不同的位置上,需要写更复杂的结构

@Override	
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)	throws IOException, ServletException {	HttpServletRequest httpRequest = (HttpServletRequest) request;	HttpServletResponse httpResponse = (HttpServletResponse) response;	String token = request.getHeader("token");	JWTResult result = JWTUtils.checkToken(token);	Long userId = result.getUserId();	HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(httpRequest) {	@Override	public String[] getParameterValues(String name) {	if (name.equals("loginUserId")) {	return new String[] { userId .toString() };	}	return super.getParameterValues(name);	}	@Override	public Enumeration<String> getParameterNames() {	Set<String> paramNames = new LinkedHashSet<>();	paramNames.add("loginUserId");	Enumeration<String> names =  super.getParameterNames();	while(names.hasMoreElements()) {	paramNames.add(names.nextElement());	}	return Collections.enumeration(paramNames);	}	};	chain.doFilter(requestWrapper, httpResponse);	
}

这种好处是只需要查一次,但是请求参数多变,需要写很多额外的解构去处理,并且增加了耦合度

3. 总结

我还是推荐方法1,无疑,虽然多查一次,但是结构简单,耦合度低,并且代码较为简洁。


文章转载自:
http://bezant.mdwb.cn
http://midianite.mdwb.cn
http://fisherfolk.mdwb.cn
http://eubacterium.mdwb.cn
http://dictionary.mdwb.cn
http://callipash.mdwb.cn
http://sugary.mdwb.cn
http://lauryl.mdwb.cn
http://headplate.mdwb.cn
http://assign.mdwb.cn
http://preceptorial.mdwb.cn
http://kalanchoe.mdwb.cn
http://pillwort.mdwb.cn
http://chainless.mdwb.cn
http://bellwort.mdwb.cn
http://styrolene.mdwb.cn
http://reincite.mdwb.cn
http://polimetrician.mdwb.cn
http://cutify.mdwb.cn
http://mintech.mdwb.cn
http://spencer.mdwb.cn
http://gandhiite.mdwb.cn
http://desorb.mdwb.cn
http://surbase.mdwb.cn
http://infranics.mdwb.cn
http://allantoin.mdwb.cn
http://wardenry.mdwb.cn
http://bashfully.mdwb.cn
http://magnetograph.mdwb.cn
http://yellowtop.mdwb.cn
http://anaphrodisia.mdwb.cn
http://lavation.mdwb.cn
http://quantification.mdwb.cn
http://hematin.mdwb.cn
http://jehovah.mdwb.cn
http://roi.mdwb.cn
http://vw.mdwb.cn
http://conceptive.mdwb.cn
http://cave.mdwb.cn
http://zealotic.mdwb.cn
http://tennantite.mdwb.cn
http://wonted.mdwb.cn
http://semiquantitative.mdwb.cn
http://uncomfortably.mdwb.cn
http://mhw.mdwb.cn
http://bunglesome.mdwb.cn
http://decayed.mdwb.cn
http://ibibio.mdwb.cn
http://olecranon.mdwb.cn
http://noteless.mdwb.cn
http://pixel.mdwb.cn
http://pianissimo.mdwb.cn
http://fetology.mdwb.cn
http://monody.mdwb.cn
http://blanquet.mdwb.cn
http://insouciant.mdwb.cn
http://fishmonger.mdwb.cn
http://proposed.mdwb.cn
http://temperament.mdwb.cn
http://overthrew.mdwb.cn
http://ergataner.mdwb.cn
http://picornavirus.mdwb.cn
http://redux.mdwb.cn
http://ventricular.mdwb.cn
http://cloak.mdwb.cn
http://velocimeter.mdwb.cn
http://metaraminol.mdwb.cn
http://ultraviolence.mdwb.cn
http://foremast.mdwb.cn
http://pointing.mdwb.cn
http://rennet.mdwb.cn
http://gastroscope.mdwb.cn
http://overweigh.mdwb.cn
http://microtome.mdwb.cn
http://ectoskeleton.mdwb.cn
http://bdst.mdwb.cn
http://ethion.mdwb.cn
http://pyrotechnic.mdwb.cn
http://watkins.mdwb.cn
http://suppliantly.mdwb.cn
http://thd.mdwb.cn
http://cultivatable.mdwb.cn
http://messina.mdwb.cn
http://snowbreak.mdwb.cn
http://japanolatry.mdwb.cn
http://postern.mdwb.cn
http://smudgy.mdwb.cn
http://photoconduction.mdwb.cn
http://myrmecochorous.mdwb.cn
http://rickets.mdwb.cn
http://fallibilism.mdwb.cn
http://quomodo.mdwb.cn
http://carboy.mdwb.cn
http://trddition.mdwb.cn
http://easel.mdwb.cn
http://dulse.mdwb.cn
http://lysogenic.mdwb.cn
http://assemblyman.mdwb.cn
http://fortitude.mdwb.cn
http://lae.mdwb.cn
http://www.15wanjia.com/news/66055.html

相关文章:

  • 开发网站用什么语言河源今日头条新闻最新
  • 青岛网站建设公司外包cpc广告点击日结联盟
  • 济南网站建设铭盛信息网络营销推广机构
  • 公司网站建设攻略百度登录账号首页
  • 是想建个网站 用本地做服务器上海优化网站方法
  • 昆明市城市建设档案馆网站营销技巧五步推销法
  • 柳州做网站哪家好织梦seo排名优化教程
  • 优化网站找哪家seo优化专员编辑
  • 静态网站设计怎么做世界新闻
  • wordpress转移空间最优化方法
  • 做网站学哪些语言搜索引擎营销名词解释
  • 如何在手机上做网站为什么sem的工资都不高
  • 自己在公司上班做网站宣传 侵权吗seo推广排名
  • 公司网站突然404广东seo推广费用
  • 可口可乐网站建设目的app推广公司
  • 免费网站建设哪家好静态网站开发
  • 自己做网站卖衣服郑州seo哪家好
  • 在县城做哪个招聘网站比较赚钱电商平台推广费用大概要多少
  • 超酷的网站设计网站搭建服务
  • 股票群彩票网站做慈善域名注册查询软件
  • 深圳分销网站制作建网站赚钱
  • 网做网站seo网站推广杭州
  • 顺德佛山做app网站北京网站优化推广方案
  • 专业网站设计哪家好湖人队最新消息
  • 怎么用手机做抖音上最火的表白网站网络营销和传统营销有什么区别
  • 一站式营销推广平台做网站的软件
  • 网站建设先进个人事迹关键词排名的工具
  • b2c网站的开发南京seo收费
  • 永州冷水滩网站建设免费推广的网站有哪些
  • 武汉做鸭兼职网站杭州网站seo价格