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

网站怎么做来卖东西国内二级域名免费申请

网站怎么做来卖东西,国内二级域名免费申请,百度信息流推广平台,做网站英文欢迎来到我的博客#xff0c;代码的世界里#xff0c;每一行都是一个故事 #x1f38f;#xff1a;你只管努力#xff0c;剩下的交给时间 #x1f3e0; #xff1a;小破站 springbootsatoken实现刷新token satoken是什么#xff1f;支持什么#xff1f;为什么需要代码的世界里每一行都是一个故事 你只管努力剩下的交给时间 小破站 springbootsatoken实现刷新token satoken是什么支持什么为什么需要token一直不变存在的问题1. 安全风险增加2. 难以撤销 Token3. 权限滥用和过期信息的风险4. 缺乏会话管理5. 影响用户隐私6. 无法确保设备和网络变化7. 用户体验不佳 逻辑代码实现代码实现 拦截器知识补充1. 注册顺序决定执行顺序2. 拦截器方法的执行顺序3. 优先级控制总结 satoken是什么支持什么 satoken官网 借用官网的一句话 Sa-Token 是一个轻量级 Java 权限认证框架主要解决登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 这里我们只说明刷新token也就是前后端分离的场景中常见的一种方案。 为什么需要 在satoken中存在两个token一个是真正的token有效期还有一个是活跃token也就是说当活跃token过期的时候是不能访问服务的需要调用相关方法解除。而当正真的token过期的时候就需要登录重新获取凭证。 所以其实根据上面的表述也是可以实现刷新token的 前端后端约定当后端因为活跃token过期返回给前端响应的状态值前端拦截并重新调用相关方法这样也是可以实现刷新token的。 token一直不变存在的问题 Token 长期不变或过期时间过长会带来一系列安全和用户体验方面的问题。以下是一些主要的风险和潜在问题 1. 安全风险增加 Token 被截获的风险如果攻击者通过某种方式截获了用户的 Token那么在 Token 长期不变或过期时间过长的情况下攻击者可以持续使用该 Token 访问用户的账号而用户不会意识到。这极大增加了账号被恶意使用的风险。无法控制 Token 失效在 Token 长期有效的情况下即使用户想要主动注销或更改密码攻击者手中的旧 Token 仍然有效导致安全威胁无法解除。无法防御会话劫持当用户登录后 Token 长期不变一旦发生会话劫持攻击者可以一直利用该 Token 冒充用户进行操作直到 Token 失效。 2. 难以撤销 Token Token 黑名单机制的缺乏当 Token 的有效期非常长时后端很难立即撤销某个 Token。即使用户账号被禁用或者注销旧的 Token 可能依然可以继续访问系统直到 Token 到期。缺乏灵活性Token 如果是长期有效的即便用户被强制下线无法简单地让旧 Token 失效除非重新设计 Token 管理系统。 3. 权限滥用和过期信息的风险 权限变化后无法及时更新当 Token 长时间有效而用户的权限发生了变化例如角色升级、降级或权限被撤销旧 Token 可能依然具有不该有的权限。这可能导致用户获得不适当的访问权限。过期数据风险如果用户 Token 长期不更新系统可能无法捕捉到最新的用户状态变更比如权限、角色、信息等导致系统提供了不正确的访问权限或内容。 4. 缺乏会话管理 无法追踪用户的活跃度长期有效的 Token 会让系统无法准确跟踪用户的登录会话。系统无法判断用户是否活跃用户的最后访问时间也无法准确追踪。无法强制用户重新登录如果 Token 过期时间过长用户可能在极长时间内不需要重新登录丧失了会话管理的能力。对于需要更高安全性的场景强制用户定期登录是必要的。 5. 影响用户隐私 隐私泄露风险增加Token 长期有效可能使得用户的个人信息在长时间内暴露于潜在的攻击面增加了隐私泄露的风险。如果用户长期未使用系统Token 应该过期以保护用户隐私。设备共享中的风险如果用户在共享设备上登录而 Token 长期不失效其他人可以轻松访问用户账户特别是在用户忘记登出或清理浏览器时。 6. 无法确保设备和网络变化 IP地址、设备等环境因素没有变化一些 Token 通常会包含用户设备、IP 地址等信息来防止 Token 被滥用。如果 Token 长期不变那么即使用户的网络环境发生了变化系统也无法感知。这将导致 Token 在不可信的环境中继续使用增加了安全风险。 7. 用户体验不佳 无法提供个性化内容更新长期不变的 Token 可能导致系统无法捕捉用户状态的实时变化从而影响个性化内容推荐或提示用户更新信息的能力。会话管理不灵活如果用户希望在不同设备上管理会话如在一个设备上登出时使另一个设备上的 Token 失效长期不变的 Token 可能无法支持这种场景。 逻辑代码实现 可以采用双拦截器实现第一个拦截器是自定义的而这个拦截器总是返回true第二个拦截器使用satoken的拦截器做一些登录或者权限的认证。 代码实现 package fun.acowbo.config;import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.util.IdUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpMethod; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** author a hrefhttps://acowbo.funacowbo/a* since 2024/8/27*/ Slf4j Component public class CustomInterceptor implements HandlerInterceptor{Value(${sa-token.token-name})private String tokenName;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {return true;}long tokenActivityTimeout StpUtil.getTokenActivityTimeout();log.info(tokenActivityTimeout:{}, tokenActivityTimeout);long tokenTimeout StpUtil.getTokenTimeout();if (tokenActivityTimeout 0){response.setHeader(tokenName, StpUtil.getTokenValue());response.setHeader(Access-Control-Expose-Headers, tokenName);}if (tokenActivityTimeout 0 tokenTimeout 0){// 首先要让token活跃StpUtil.updateLastActivityToNow();String loginId (String) StpUtil.getLoginId();// 先退出否则之前的token还能用StpUtil.logout(loginId);// 重新设置token这里仅仅是为了安全否则始终token是一个值StpUtil.login(loginId,new SaLoginModel().setToken(IdUtil.randomUUID()));// 请求头修改token的值否则在第二个拦截器会报错因为老的token已经失效了request.setAttribute(tokenName, StpUtil.getTokenValue());// 响应头设置值response.setHeader(tokenName, StpUtil.getTokenValue());response.setHeader(Access-Control-Expose-Headers, tokenName);}return true;}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {} } package fun.acowbo.config;import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.stp.StpUtil; import org.springframework.beans.factory.annotation.Value; 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.WebMvcConfigurer;import javax.annotation.Resource; import java.util.Arrays;/*** description: sa-token权限配置类** author a hrefhttps://acowbo.funacowbo/a* since 2024/6/7 13:59*/ Configuration public class SaTokenConfigure implements WebMvcConfigurer {Value(${excludePath})private String excludePath;Resourceprivate CustomInterceptor customInterceptor;Overridepublic void addCorsMappings(CorsRegistry registry) {// 允许所有路径registry.addMapping(/**)// 允许所有来源.allowedOrigins(*)// 允许的 HTTP 方法.allowedMethods(GET, POST, PUT, DELETE)// 允许的请求头.allowedHeaders(*)// 允许发送 Cookie.allowCredentials(false)// 预检请求的缓存时间.maxAge(3600);}// 注册拦截器Overridepublic void addInterceptors(InterceptorRegistry registry) {// 注册 Sa-Token 拦截器校验规则为 StpUtil.checkLogin() 登录校验。registry.addInterceptor(customInterceptor).addPathPatterns(/**).excludePathPatterns(Arrays.asList(excludePath.split(,)));registry.addInterceptor(new SaInterceptor(handle - StpUtil.checkLogin())).addPathPatterns(/**).excludePathPatterns(Arrays.asList(excludePath.split(,)));} } 拦截器知识补充 在 Spring 框架中如果定义了多个拦截器它们的执行顺序是根据它们的注册顺序决定的。具体的执行顺序可以通过以下规则来理解 1. 注册顺序决定执行顺序 在 Spring 中拦截器是通过 WebMvcConfigurer 接口中的 addInterceptors 方法进行注册的。多个拦截器会按照它们注册的先后顺序进行调用。 拦截器的执行顺序进入请求时按照注册顺序依次调用先注册的拦截器会先执行。拦截器的执行顺序响应时响应返回时拦截器的执行顺序与请求时相反最后注册的拦截器会最先执行。 示例 Configuration public class WebConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new FirstInterceptor()).addPathPatterns(/**);registry.addInterceptor(new SecondInterceptor()).addPathPatterns(/**);} }在这个例子中 进入请求时FirstInterceptor - SecondInterceptor返回响应时SecondInterceptor - FirstInterceptor 2. 拦截器方法的执行顺序 拦截器的核心方法有以下三个它们的调用顺序也需要注意 preHandle: 在请求处理之前执行。postHandle: 在请求处理完后但在视图渲染之前执行。afterCompletion: 在视图渲染完成后执行。 当有多个拦截器时 preHandle 方法按照拦截器的注册顺序执行。postHandle 和 afterCompletion 方法则按照相反顺序执行。 3. 优先级控制 如果需要更精确地控制拦截器的顺序除了按注册顺序还可以借助其他方法 排序接口通过实现 Ordered 接口或使用 Order 注解可以为拦截器明确指定顺序。配置拦截器链的顺序通过配置文件明确指定拦截器的顺序也可以使用 InterceptorRegistry 的 API 动态调整顺序。 总结 拦截器的执行顺序取决于它们的注册顺序先注册的拦截器先处理请求后注册的拦截器先处理响应。可以使用 Order 注解或实现 Ordered 接口来精确控制多个拦截器的执行顺序。
http://www.w-s-a.com/news/331966/

相关文章:

  • 辽宁响应式网站建设价格企业所得税率
  • 网站编辑及seo招聘上海做网站公司做网站的公司
  • 杭州四喜做网站建设么ja.wordpress.org
  • 旅游网站策划书企业公司名字大全
  • 营销型网站的标准郑州新密网站建设
  • 建设网站的公司管理公司网站设计
  • 手机网站有什么区别是什么意思不让网站开发公司进入后台
  • 网站正在建设中_敬请期待做宠物店网站
  • 个体营业执照可以做网站服务吗宣传品牌网站建设
  • 做平台是做网站和微信小程序的好别邯郸捕风科技有限公司
  • 公司做哪个网站比较好巴顿品牌设计官网
  • 济宁北湖建设局网站我要推广
  • mc网站的建设大型网站开发
  • 给网站做推广一般花多少钱全国最大的外发加工网
  • linux 网站301江西seo推广方案
  • c2c电子商务网站定制开发wordpress html单页
  • 查询网站空间商自己做的网站如何放到微信
  • 现在网站开发哪个语言好月嫂公司网站建设构思
  • 腾讯云免费网站建设网站设计一级网页
  • 网站备案系统验证码出错的解决方案wordpress+论坛+注册
  • 代做毕设的网站先做网站先备案
  • 网站定制哪个好wordpress主题dux1.9
  • 怎么自己做网站地图网站建设弹窗代码
  • wordpress 作品集网站企业做网站建设的好处
  • 公司开发的网站健身网站开发项目总结
  • 怎样做游戏网站网站建设万首先金手指14
  • 英德建设局网站龙岩网上房地产网
  • wordpress vr网站电影网页设计尺寸
  • 做淘宝客新增网站推广怎样开一家公司
  • 企业网站有必要做吗?网站平均停留时间