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

本科学计算机是做网站吗做微网站的公司哪家好

本科学计算机是做网站吗,做微网站的公司哪家好,怎么做网站文件验证,软件系统开发合同目录 基础概念 依赖 生成令牌 工具类 控制层 解析令牌 工具类 网关过滤器 效果 基础概念 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准#xff08;(RFC 7519).该token被设计为紧凑且安全的#xff0c;特别适用于分布式站点…目录 基础概念 依赖 生成令牌 工具类 控制层 解析令牌 工具类 网关过滤器 效果 基础概念 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519).该token被设计为紧凑且安全的特别适用于分布式站点的单点登录SSO场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息以便于从资源服务器获取资源也可以增加一些额外的其它业务逻辑所必须的声明信息该token也可直接被用于认证也可被加密。 JSON Web TokenJWT是目前最流行的跨域身份验证解决方案 为什么使用 传统的intenet服务的认证是通过session进行的当用户通过了安全认证后则在服务端的session对象中保存该用户的认证信息这样该用户对服务的访问被认为是安全的。这种模式的最大问题是没有分布式架构不方便进行横向扩展这种模式只适合于单体应用模式。如果需要进行服务集群则需要处理好共享session的问题。 如果一个庞大的系统需要按服务分解为多个独立的服务使用分布式架构则这种方式更难处理。使用jwt可以方便的处理上面提到的问题。 验证过程 客户端接收服务器返回的JWT将其存储在Cookie或localStorage中此后在于服务器的交互中都携带者JWT信息它验证的方法其实很简单只要把header做base64url解码就能知道JWT用的什么算法做的签名然后用这个算法再次用同样的逻辑对header和payload做一次签名并比较这个签名是否与JWT本身包含的第三个部分的串是否完全相同只要不同就可以认为这个JWT是一个被篡改过的串。 依赖 dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version/dependency!--javax.xml.bind.DatatypeConverter java8 以后要加--dependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion2.3.1/version/dependency 生成令牌 在登录过程中新建令牌所以需要写在生产者中并且根据数据库的用户和密码登录并判断其权限根据给定的母版key、用户名、密码、权限生成其令牌。注意这里设定了1小时候令牌过期。 工具类 Component public class JwtUtil {//加密 解密时的密钥 用来生成keypublic static final String JWT_KEY IT1995;/*** \* 生成加密后的秘钥 secretKey* p* \* return*/public static SecretKey generalKey() {byte[] encodedKey Base64.getDecoder().decode(JwtUtil.JWT_KEY);SecretKey key new SecretKeySpec(encodedKey, 0, encodedKey.length,AES);return key;}/*** \* 登录成功后生成token* \* param id* \* param account* \* param role* \* param ttlMillis* \* return*/public static String createJWT(String id, Account account, String role, longttlMillis) {SignatureAlgorithm signatureAlgorithm SignatureAlgorithm.HS256; //指定签名的时候使用的签名算法也就是header那部分jjwt已经将这部分内容封装好了。long nowMillis System.currentTimeMillis();//生成JWT的时间Date now new Date(nowMillis);SecretKey key generalKey();//生成签名的时候使用的秘钥secret,这个方法本地封装了的一般可以从本地配置文件中读取切记这个秘钥不能外露哦。它就是你服务端的私钥在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。Map claims new HashMap();claims.put(name, account.getUsername());claims.put(role, role);JwtBuilder builder Jwts.builder()//这里其实就是new一个JwtBuilder设置jwt的body.setClaims(claims) //如果有私有声明一定要先设置这个自己创 建的私有的声明这 个是给builder的claim赋值一旦写在标准的声明赋值之后就是覆盖了那些标准的声 明的 创建用户表.setId(id) //设置jti(JWT ID)是JWT的唯一标识根 据业务需要这个可以设置为 一个不重复的值主要用来作为一次性token,从而回避重放攻击。.setIssuedAt(now) //iat: jwt的签发时间 // .setSubject(subject) //sub(Subject)代表这个JWT的主体即它的所有人这个是一个json格式的字符串可以存放什么useridroldid之类的作为什么用户的唯一标志。.signWith(signatureAlgorithm, key);//设置签名使用的签名算法和签名使用的秘钥if (ttlMillis 0) {long expMillis nowMillis ttlMillis;Date exp new Date(expMillis);builder.setExpiration(exp); //设置过期时间}return builder.compact(); //就开始压缩为xxxxxxxxxxxxxx.xxxxxxxxxxxxxxx.xxxxxxxxxxxxx这样的jwt}/*** \* 密码解密对比方法4.编写mapper* 5.编写service根据用户名取的用户信息和权限* \* param password* \* param repassword* \* return*/public static boolean matchsPassword(String password, String repassword) {BCryptPasswordEncoder encoder new BCryptPasswordEncoder();return encoder.matches(password, repassword);} } 控制层 RestController public class LoginController {AutowiredAccountService accountService;RequestMapping(/login)public String Login(Account account) {String token 没有token;//通过用户名拿到用户实体类Account result accountService.loginByUserName(account.getUsername());if (result ! null) {//然后进行密码的加密后的比较boolean b JwtUtil.matchsPassword(account.getPassword(), result.getPassword());//如果密码一致表示登录成功if (result ! null b) {ListAuthority author accountService.findAuthoritiesByUsername(account.getUsername());token JwtUtil.createJWT(UUID.randomUUID().toString(), result, author.get(0).getAuthority(), 3600L * 1000);}}return token;} } 解析令牌 给定令牌并解析根据不同token解析出对应的用户名、密码和权限并判断访问内容根据访问路径中的敏感词判断是否有权限查看页面。 工具类 Component public class JwtUtil {//加密 解密时的密钥 用来生成keypublic static final String JWT_KEY IT1995;/*** \* 生成加密后的秘钥 secretKey* p* \* return*/public static SecretKey generalKey() {byte[] encodedKey Base64.getDecoder().decode(JwtUtil.JWT_KEY);SecretKey key new SecretKeySpec(encodedKey, 0, encodedKey.length,AES);return key;}/*** \* 解析token* \* param jwt* \* return*/public static Claims parseJWT(String jwt) {SecretKey key generalKey(); //签名秘钥和生成的签名的秘钥一模一样Claims claims Jwts.parser() //得到DefaultJwtParser.setSigningKey(key) //设置签名的秘钥.parseClaimsJws(jwt).getBody();//设置需要解析的jwtreturn claims;} } 网关过滤器 Component public class gatewayConfig implements GlobalFilter, Ordered {private static final String AUTHORIZE_TOKEN token;Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {String requestPath exchange.getRequest().getPath().value();// 1. 获取请求ServerHttpRequest request exchange.getRequest();//2. 则获取响应ServerHttpResponse response exchange.getResponse();//3. 如果是登录请求则放行if (request.getURI().getPath().contains(/login) || request.getURI().getPath().contains(/logout)) {return chain.filter(exchange);}//4. 获取请求头HttpHeaders headers request.getHeaders();//5. 请求头中获取令牌String token headers.getFirst(AUTHORIZE_TOKEN);//6. 判断请求头中是否有令牌if (StringUtils.isEmpty(token)) {//7. 响应中放入返回的状态吗, 没有权限访问response.setStatusCode(HttpStatus.UNAUTHORIZED);//8. 返回return response.setComplete();}//9. 如果请求头中有令牌则解析令牌try {Claims claims JwtUtil.parseJWT(token);//获取token中的权限然后根据权限做访问权限String role (String) claims.get(role);System.out.println(role);if (role.equals(vip)) {return chain.filter(exchange);}if (role.equals(common)) {if (request.getURI().getPath().contains(/vip)) {response.setStatusCode(HttpStatus.FORBIDDEN);//11. 返回return response.setComplete();}}} catch (Exception e) {e.printStackTrace();//10. 解析jwt令牌出错, 说明令牌过期或者伪造等不合法情况出现response.setStatusCode(HttpStatus.FORBIDDEN);//11. 返回return response.setComplete();}//12. 放行return chain.filter(exchange);}Overridepublic int getOrder() {return 0;} } 效果 只有vip用户才能查看vip页面普通用户查看vip页面403权限不足错误。如果没有登录令牌查看页面401错误。 没有登录令牌 vip登录成功 普通用户访问vip 403
http://www.hkea.cn/news/14489469/

相关文章:

  • 如何建个人网站教程公司网站优化推广方案
  • 中国建设银行亚洲网站专业的营销型网站定制
  • 摄影网站建设论文WordPress小工具是什么
  • 网站内容建设包括设计公司企业站
  • 济南网站建设公司哪个好点呢株洲关键词优化
  • 个人网站好备案吗PHP网站建设的课后笔记
  • 南宁网站定制易网
  • 济南网站建设yigeseo哈尔滨免费做网站
  • 山东网站建设服务网站建设的 关键词
  • 网站如何seo网站开发调查问卷题
  • 建设网站哪些公司好北京手机模板建站
  • 成都网站设计公司价格基于jsp的网站建设论文
  • 廊坊网站建站网站wordpress微信 群发
  • 寮步营销型网站建设价格创意设计提案
  • 展示类网站cms苏州做网站推广的公司哪家好
  • 建设银行360网站登录不了深圳设计网站排名
  • 景德镇网站维护电子商务网站建设规划
  • 淘宝网站建设的主要工作设计素材网站大全网站
  • 网站设计远程培训设计页面ui
  • 旅游网站建设的建议怎么用txt做网站
  • 网站建设的目标客户分析wordpress抽奖主题
  • 温州免费建站模板企业网是什么意思
  • 上海网站设计印刷拆除wordpress分类模板
  • 网站开发 质保金微信内转发的网页怎么制作
  • 青岛市工程建设信息网站建设领域工人管理网站
  • 网站红色济南网站建设和维护
  • 淘特app推广代理企业站seo点击软件
  • 永康网站建设公司数学很差能学计算机吗
  • 个人网站建设的流程建设部职业资格注册网站
  • 网站注册和进入asp大学网站开发与管理课程心得体会