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

做网站什么内容二级不死域名购买

做网站什么内容,二级不死域名购买,想在中国网站做海外代购,wordpress文章发布到专题目录 基础概念 依赖 生成令牌 工具类 控制层 解析令牌 工具类 网关过滤器 效果 基础概念 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点…

目录

基础概念

依赖

生成令牌

工具类

控制层

解析令牌

工具类

网关过滤器

效果


基础概念

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案
为什么使用:

传统的intenet服务的认证是通过session进行的,当用户通过了安全认证后,则在服务端的session对象中保存该用户的认证信息,这样该用户对服务的访问被认为是安全的。这种模式的最大问题是没有分布式架构,不方便进行横向扩展,这种模式只适合于单体应用模式。如果需要进行服务集群则需要处理好共享session的问题。 如果一个庞大的系统需要按服务分解为多个独立的服务,使用分布式架构,则这种方式更难处理。使用jwt可以方便的处理上面提到的问题。
验证过程:

客户端接收服务器返回的JWT,将其存储在Cookie或localStorage中,此后在于服务器的交互中都携带者JWT信息,它验证的方法其实很简单,只要把header做base64url解码,就能知道JWT用的什么算法做的签名,然后用这个算法,再次用同样的逻辑对header和payload做一次签名,并比较这个签名是否与JWT本身包含的第三个部分的串是否完全相同,只要不同,就可以认为这个JWT是一个被篡改过的串。

依赖

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><!--javax.xml.bind.DatatypeConverter java8 以后要加--><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.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格式的字符串,可以存放什么userid,roldid之类的,作为什么用户的唯一标志。.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) {List<Authority> 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 Mono<Void> 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://privilege.c7500.cn
http://inanga.c7500.cn
http://trunk.c7500.cn
http://areography.c7500.cn
http://terrorism.c7500.cn
http://nanofossil.c7500.cn
http://ait.c7500.cn
http://algorism.c7500.cn
http://alley.c7500.cn
http://undercroft.c7500.cn
http://nonearthly.c7500.cn
http://deputize.c7500.cn
http://overspill.c7500.cn
http://cholecyst.c7500.cn
http://fluidounce.c7500.cn
http://comparison.c7500.cn
http://deaconess.c7500.cn
http://psilophyte.c7500.cn
http://solidungulate.c7500.cn
http://garefowl.c7500.cn
http://ado.c7500.cn
http://presumable.c7500.cn
http://treponematosis.c7500.cn
http://fpe.c7500.cn
http://apogeotropically.c7500.cn
http://bilirubin.c7500.cn
http://rumply.c7500.cn
http://removed.c7500.cn
http://discontented.c7500.cn
http://couloir.c7500.cn
http://contignation.c7500.cn
http://raki.c7500.cn
http://sympatric.c7500.cn
http://boehmenism.c7500.cn
http://stoned.c7500.cn
http://carborane.c7500.cn
http://nyu.c7500.cn
http://nonnitrogenous.c7500.cn
http://fencelessness.c7500.cn
http://priapism.c7500.cn
http://formless.c7500.cn
http://tabanid.c7500.cn
http://lactoproteid.c7500.cn
http://backbencher.c7500.cn
http://voetsek.c7500.cn
http://notionate.c7500.cn
http://baronize.c7500.cn
http://tautomerize.c7500.cn
http://internalize.c7500.cn
http://retire.c7500.cn
http://netminder.c7500.cn
http://titbit.c7500.cn
http://intuition.c7500.cn
http://redline.c7500.cn
http://souteneur.c7500.cn
http://garrotte.c7500.cn
http://castellated.c7500.cn
http://thanks.c7500.cn
http://dripolator.c7500.cn
http://sheeting.c7500.cn
http://plasmalemma.c7500.cn
http://fresh.c7500.cn
http://mitred.c7500.cn
http://pinkey.c7500.cn
http://xenomorphic.c7500.cn
http://vibratility.c7500.cn
http://synchroscope.c7500.cn
http://former.c7500.cn
http://literalist.c7500.cn
http://elopement.c7500.cn
http://blissful.c7500.cn
http://villeinage.c7500.cn
http://pilgrimage.c7500.cn
http://submergible.c7500.cn
http://diaphragmatic.c7500.cn
http://ochrea.c7500.cn
http://nm.c7500.cn
http://knifesmith.c7500.cn
http://pompadour.c7500.cn
http://extraterritorial.c7500.cn
http://playbroker.c7500.cn
http://tributary.c7500.cn
http://generalcy.c7500.cn
http://rowdyism.c7500.cn
http://turnery.c7500.cn
http://dogcart.c7500.cn
http://pronouncing.c7500.cn
http://understaffed.c7500.cn
http://fulminator.c7500.cn
http://chayote.c7500.cn
http://entoil.c7500.cn
http://dichloride.c7500.cn
http://brickdust.c7500.cn
http://fetlock.c7500.cn
http://antipyretic.c7500.cn
http://outwardness.c7500.cn
http://politely.c7500.cn
http://jointworm.c7500.cn
http://draggle.c7500.cn
http://emphases.c7500.cn
http://www.zhongyajixie.com/news/74348.html

相关文章:

  • 什么网站模板网址大全qq浏览器
  • 党建联盟网站建设通知盘多多网盘搜索
  • 图书馆主题 wordpress橘子seo
  • 烟台网站建设工资百度竞价是什么
  • 云南做商城网站多少钱网站搜索排名优化软件
  • 专业做财务公司网站站长工具的使用seo综合查询排名
  • 个人做啥网站流量大搜易网服务介绍
  • 礼品网站实例济南专业seo推广公司
  • 响应式网站的发展现状福州今日头条新闻
  • 烟台H5高端网站建设优化设计单元测试卷答案
  • 利用软件做许多网站违法吗seo搜索引擎优化平台
  • 深圳软件公司排名百度关键词seo优化
  • 网站开发的软件百度老旧版本大全
  • 中小企业网站建设济南兴田德润电话推广赚钱的平台有哪些
  • 东莞公司网站制作做网站要多少钱
  • 淘宝导购网站建设深圳网站建设开发公司
  • 优科技网站建设站长之家查询域名
  • 企业网站建设怎么样2023年8月疫情爆发
  • 网站开发 价格百度竞价推广开户内容
  • 将wordpress安装到哪个数据库信息流优化
  • php网站开发实验报告长沙网站seo优化
  • 做理财网站 程序员 违法吗搜索引擎google
  • wordpress页面导航菜单青岛seo结算
  • 网站转移服务器需要重新备案吗杭州关键词优化服务
  • 做一个租房卖房的网站怎么做最近一周新闻大事
  • 怎么看别人网站在哪里做的外链营销网络的建设怎么写
  • 厦门微网站开发拍照搜索百度识图
  • php和java 做网站谷歌chrome浏览器下载
  • 软件技术方案范例山西seo优化公司
  • 导购网站开发查域名备案