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

桃城网站建设公司网站技术解决

桃城网站建设公司,网站技术解决,做网站海口,wordpress 修改样式1.JWT是什么#xff1f;Json Web Token(JWT)是目前比较流行的跨域认证解决方案#xff0c;是一种基于JSON的开发标准#xff0c;由于数据是可以经过签名加密的#xff0c;比较安全可靠#xff0c;一般用于前端和服务器之间传递信息#xff0c;也可以用在移动端和后台传递… 1.JWT是什么Json Web Token(JWT)是目前比较流行的跨域认证解决方案是一种基于JSON的开发标准由于数据是可以经过签名加密的比较安全可靠一般用于前端和服务器之间传递信息也可以用在移动端和后台传递认证信息。2.JWT的组成让我们先来看看jwt的实际例子Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2wiOiJST0xFXzEiLCJpc3MiOiJTbmFpbENsaW1iIiwiaWF0IjoxNTk1OTkzMDQwLCJzdWIiOiIxNTAwMDAwMDAwMCIsImV4cCI6MTU5NjU5Nzg0MH0.Wxet2qPG1ajyG9CcQCN29gfKJzal0vCmQSXrwAgQwcI我们可以看到这个JWT包含3部分是由“.”号分开的Bearer是jwt中的一种前缀规范。第一部分是HeadereyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9第二部分是PayloadeyJyb2wiOiJST0xFXzEiLCJpc3MiOiJTbmFpbENsaW1iIiwiaWF0IjoxNTk2MDAzODM4LCJzdWIiOiIxNTAwMDAwMDAwMCIsImV4cCI6MTU5NjYwODYzOH0第三方部分是签名Signature:MJmTSGBM9wRVOY40ORZuSGpT7FQNUcD2JlJxL0K0-YM3.JWT的流程先上图:客户端登录接口输入用户名和密码提交到服务器服务器端校验用户名和密码校验通过则创建一个JWT服务器端返回该JWT给客户端客户端每请求一次接口在Headers中带上返回的JWT;JWT自身的算法校验该JWT如果校验通过操作DB返回数据反之返回状态码和错误信息。4.SpringBoot集成JWT代码实现引入jwt的依赖库 dependency groupIdio.jsonwebtokengroupId artifactIdjjwt-apiartifactId version0.10.7version dependency dependency groupIdio.jsonwebtokengroupId artifactIdjjwt-implartifactId version0.10.7version scoperuntimescope dependency dependency groupIdio.jsonwebtokengroupId artifactIdjjwt-jacksonartifactId version0.10.7version scoperuntimescope dependencyJwtTokenUtils类用于生成token/** * author kevincow */public class JwtTokenUtils { /** * 生成足够的安全随机密钥以适合符合规范的签名 */ private static byte[] apiKeySecretBytes Base64.getDecoder().decode(SecurityConstants.JWT_SECRET_KEY); private static SecretKey secretKey Keys.hmacShaKeyFor(apiKeySecretBytes); public static String createToken(String username, ListString roles) { long expiration SecurityConstants.EXPIRATION_REMEMBER; String tokenPrefix Jwts.builder() .setHeaderParam(typ, SecurityConstants.TOKEN_TYPE) .signWith(secretKey, SignatureAlgorithm.HS256) .claim(SecurityConstants.ROLE_CLAIMS, String.join(,, roles)) .setIssuer(SnailClimb) .setIssuedAt(new Date()) .setSubject(username) .setExpiration(new Date(System.currentTimeMillis() expiration * 1000)) .compact(); return SecurityConstants.TOKEN_PREFIX tokenPrefix; }}接下来需要写一个过滤器去实现token的校验功能/** * 实现token的校验功能 * * 过滤器处理所有HTTP请求并检查是否存在带有正确令牌的Authorization标头。例如如果令牌未过期或签名密钥正确。 * * author kevincow */public class JWTAuthorizationFilter extends BasicAuthenticationFilter { private static final Logger logger Logger.getLogger(JWTAuthorizationFilter.class.getName()); public JWTAuthorizationFilter(AuthenticationManager authenticationManager) { super(authenticationManager); } Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { logger.info(tokenrequest.getHeader(SecurityConstants.TOKEN_HEADER)); String authorization request.getHeader(SecurityConstants.TOKEN_HEADER); // 如果请求头中没有token信息则直接放行了 if (authorization null || !authorization.startsWith(SecurityConstants.TOKEN_PREFIX)) { chain.doFilter(request, response); return; } // 如果请求头中有token则进行解析并且设置授权信息 SecurityContextHolder.getContext().setAuthentication(getAuthentication(authorization)); super.doFilterInternal(request, response, chain); } /** * 获取用户认证信息 Authentication */ private UsernamePasswordAuthenticationToken getAuthentication(String authorization) { String token authorization.replace(SecurityConstants.TOKEN_PREFIX, ); try { String username JwtTokenUtils.getUsernameByToken(token); logger.info(checking username: username); // 通过 token 获取用户具有的角色 List userRolesByToken JwtTokenUtils.getUserRolesByToken(token); if (!StringUtils.isEmpty(username)) { return new UsernamePasswordAuthenticationToken(username, null, userRolesByToken); } } catch (SignatureException | ExpiredJwtException | MalformedJwtException | IllegalArgumentException exception) { logger.warning(Request to parse JWT with invalid signature . Detail : exception.getMessage()); } return null; }}最后写业务实现代码了(这里只展示控制层代码业务代码就不一一赘述)/**     * 微信端登录接口在header中带上token * * param userName * param passWord     * return 是否登录成功 */    ApiOperation(value  用户登录成功之后在header中带上token,            notes  校验用户名密码,校验完成之后在header中带上token, httpMethod  GET)    PostMapping(/whetherIsSysUser)    public SuccessResponse whetherRegister(ApiParam(用户名) RequestParam String userName,                                           ApiParam(密码) RequestParam String passWord, HttpServletResponse response) { try { User user userService.whetherRegister(userName, passWord); if (StringUtils.isEmpty(user)) { return SuccessResponse.of(false, 该用户未注册); } JwtUser jwtUser new JwtUser(user); List roles jwtUser.getAuthorities() .stream() .map(GrantedAuthority::getAuthority) .collect(Collectors.toList()); String token JwtTokenUtils.createToken(user.getPhone(), roles); // Http Response Header 中返回 Token response.setHeader(SecurityConstants.TOKEN_HEADER, token); } catch (RuntimeException e) { e.printStackTrace(); return SuccessResponse.of(false, 该用户未注册); } return SuccessResponse.of(true); }至此代码实现部分差不多就完成了。接下来我们看下效果上图可以看到登录接口用户名密码校验通过之后在headers中返回了Authorization。然后当客户端请求其他接口并在请求头带上登录时返回的Authorization就能正常响应了。如果没有带上Authorization呢那么会报一个错。{ timestamp: 2020-07-29 15:38:23, status: 401, error: Unauthorized, message: Full authentication is required to access this resource, path: /wx/users/showNewVersion}以上就差不多是jwt的整个流程了。5.总结    从特点中看优点JSON的通用性决定了JWT是个跨语言的技术JWT token对于sessionid的方案来说JWT可以携带任何我们想要用到的信息安全性高防止token伪造和篡改JWT token是自校验的形式不需要任何其他请求和数据库操作使我们系统管理会话更高效JWT不需要在服务端保存会话信息, 所以它易于应用的扩展    从特点中找缺点一旦成功签发JWT token无法手动将其过期在token签发后的有效时间内JWT无法做到及时获取最新数据例如修改密码后无感知存储空间、网络流量开销更大为了安全JWT需要使用https协议以免token泄露以上。我是凯文cow念念不忘必有回响。
http://www.pierceye.com/news/740250/

相关文章:

  • 网站的推广一般有什么方式韩城网站建设韩城网站推广
  • 书城网站开发四川省建设厅网站投诉
  • 想要个网站沈阳网站备案
  • 网站建设分哪些类别谁有做爰网站号
  • 建设电子票务系统的网站需要多少钱网站开发一对一
  • 网站规划可以分成哪几步上海营销型网站制作
  • gta5 网站正在建设中新品发布会ppt
  • 做的网站每年需要续费idc网站源码
  • 备案主体负责人和网站负责人新网站 seo
  • 网站后台有什么用wordpress 不显示账号名
  • 另类小说 Wordpress长沙seo步骤
  • 网站建设7个基37网游官网
  • 网站设计存在的问题建筑设计私活平台
  • 网站如何做淘宝支付宝wordpress多站点不显示
  • 关于设计的网站免费注册公司
  • 网站建设排名北京网站排名降级的原因有哪些
  • 介绍网页设计做seo推广网站
  • 建立个人博客网站wordpress东城东莞网站建设
  • 从哪些方面建设网站泰州东方医院
  • 分类信息网站系统cmsWordPress新闻面包屑主题
  • wordpress 多标签关键字优化策略
  • idea15网站开发网站如何提升seo排名
  • 谁有网站推荐一下好安阳刚刚发生的事
  • 博客网站快速排名临邑县住房和城乡建设局网站
  • 二手网站建设方案营销网站建设服务平台
  • 遵化建设局网站濮阳新闻综合频道
  • 百度云如何做网站论文网站建设与运营
  • 网站开发环境实验报告注册公司流程和费用是多少
  • 下载一个网站学院网站建设的作用
  • 济南专业网站优化花西子的网络营销策略