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

永久免费手机网站建设教程外贸网络营销策划方案制定

永久免费手机网站建设教程,外贸网络营销策划方案制定,网站推广模板,互联网技术试验卫星一、简述 JWT由三部分组成:Header、Payload(负载)、Signature(签名)。 Header部分记录使用的加密算法和Token类型。Payload部分可以放一些用户信息。如账号、姓名等非敏感信息。签名是将Header部分和Payload部分做加密签名,使用Header中指定的加密算法…

一、简述

JWT由三部分组成:Header、Payload(负载)、Signature(签名)。

  1. Header部分记录使用的加密算法和Token类型。
  2. Payload部分可以放一些用户信息。如账号、姓名等非敏感信息。
  3. 签名是将Header部分和Payload部分做加密签名,使用Header中指定的加密算法。

二、JWT工具类

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;/*** JWT生成、解析、校验工具类** @author neo* @since 2025-02-27*/
public class JWTUtil {// 加密密钥。在程序启动后初始化private String secret = "";private JWTUtil(){}public static JWTUtil instance(){return JWTUtilBuilder.instance;}/*** 设置加密密钥** @param secret 密钥* @author neo* @since 2025/3/25*/public void setSecret(String secret){this.secret = secret;}/*** 创建Token** @param parameterMap 参数表* @return 生成的Token* @author neo* @since 2025/3/25*/public String createToken(Map<String, String> parameterMap){Calendar calendar = Calendar.getInstance();// 设置三天后过期calendar.add(Calendar.DATE, 3);JWTCreator.Builder builder = JWT.create();// 设置headerMap<String, Object> headerMap = new HashMap<>();headerMap.put("alg", "HS256");headerMap.put("typ", "JWT");builder.withHeader(headerMap);// 填充负载for (Map.Entry<String, String> entry : parameterMap.entrySet()) {builder.withClaim(entry.getKey(), entry.getValue());}// 创建tokenString token = builder.withExpiresAt(calendar.getTime()).sign(Algorithm.HMAC256(secret));return token;}/*** 校验Token是否有效** @param token 令牌* @return 校验结果*/public DecodedJWT verifyJWT(String token){JWTVerifier verifier = JWT.require(Algorithm.HMAC256(secret)).build();return verifier.verify(token);}/*** 解析Token获取负载中的参数** @param token 令牌* @return 参数*/public Map<String, String> decodeToken(String token){DecodedJWT decodedJWT = verifyJWT(token);// 提取参数Map<String, String> parameterMap = new HashMap<>();Map<String, Claim> claimMap = decodedJWT.getClaims();claimMap.forEach((k, v)->{parameterMap.put(k, v.asString());});return parameterMap;}private static final class JWTUtilBuilder {private static JWTUtil instance = new JWTUtil();}
}

JWTUtil 工具类实现了JWT的生成,校验、参数解析功能。使用的密钥secret可以在程序启动时从配置文件中读取,然后通过setSecret方法保存到内存。

三、提供登录接口

@RestController
@RequestMapping("/v1/login")
@Api(tags = "用户登录服务")
public class LoginController extends BaseController {private static final Logger LOGGER = LogManager.getLogger(LoginController.class);@Resourceprivate LoginService loginService;/*** 用户登录** @param loginUser 用户信息* @return 生成的token*/@PostMapping("/login-in")@ApiOperation(value = "用户登录")public ResultModel<String> login(@RequestBody UserLogin loginUser){return loginService.login(loginUser);}}

前端在用户登录时调用后台的登录接口,传入用户名,密码等信息(封装在UserLogin中)。后端服务调用JWTUtil的接口生成Token信息并返回给前端。前端可以将Token信息保存在本地存储或者session中。

用户登录后,前端后续调用其它业务接口时将Token放到http的请求头中传递到后台,后台拦截器提取Token数据做权限认证。

四、通过拦截器拦截http请求并认证

import com.elon.base.util.JWTUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 拦截rest接口请求,做用户合法性认证.** @author neo* @since 2025-02-28*/
public class JWTInterceptor implements HandlerInterceptor {private static final Logger LOGGER = LogManager.getLogger(JWTInterceptor.class);@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 提起请求头中的jwt信息String jwtToken = request.getHeader("jwt-token");try {JWTUtil.instance().verifyJWT(jwtToken);response.setHeader("Access-Control-Allow-Origin", "*");return true;} catch (Exception e){LOGGER.error("Verify token fail.", e);response.setContentType("application/json;charset=UTF-8");response.getWriter().println("Token is valid");// 设置为没有权限,前端拿到响应码需跳转到登录页面response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);return false;}}
}

认证不通过的请求返回401。

五、添加拦截器及拦截规则

import com.neo.lesson.manage.JWTInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** 注册JWT Token拦截器** @author neo* @since 2025-02-28*/
@Configuration
public class JWTConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry){registry.addInterceptor(new JWTInterceptor()).addPathPatterns("/v1/lesson/**", "/v1/student/**").excludePathPatterns("/v1/login/**");}
}

仅有用户登录的接口不拦截,其它业务接口均需要拦截。

六、扩展考虑

  1. JWT在生成时设置了过期时间,但在实际项目中可能会根据业务需要设置不同的过期时间。例如:如果用户登录后30分钟没有做任何操作,那么系统将自动登出。这种情况可以考虑将token数据放到redis中存储,利用redis的失效机制。

  2. 系统不仅需要认证用户身份合法性,还需要根据用户的不同角色对接口做鉴权。此时需要在拦截http请求后获取用户的权限信息,结合当前请求的接口地址做校验。


文章转载自:

http://RNzuGMIm.Ljxps.cn
http://1WjHbjsw.Ljxps.cn
http://NjQhLxbj.Ljxps.cn
http://0aSSkevs.Ljxps.cn
http://Fm3IOwPE.Ljxps.cn
http://GZb7cq3t.Ljxps.cn
http://hbRemAFE.Ljxps.cn
http://XItDZQWY.Ljxps.cn
http://2MH1CLaG.Ljxps.cn
http://I1vc1DnQ.Ljxps.cn
http://vEsD7iHM.Ljxps.cn
http://qki2WAbz.Ljxps.cn
http://CtcNjavj.Ljxps.cn
http://wUwFzbqv.Ljxps.cn
http://Ox9up20P.Ljxps.cn
http://E0XFMTGl.Ljxps.cn
http://w9AglCP4.Ljxps.cn
http://XfC5kri4.Ljxps.cn
http://LUBQN8WB.Ljxps.cn
http://MLTal1MF.Ljxps.cn
http://NEo91PMZ.Ljxps.cn
http://HivF02jT.Ljxps.cn
http://zRc8lRR7.Ljxps.cn
http://OaGwfhdU.Ljxps.cn
http://UBSxa2yz.Ljxps.cn
http://6O2rC3xR.Ljxps.cn
http://nRQgwLJW.Ljxps.cn
http://iy8MLj7a.Ljxps.cn
http://RLTUrQQu.Ljxps.cn
http://Y7smXUtD.Ljxps.cn
http://www.dtcms.com/wzjs/727302.html

相关文章:

  • 模板网站建设清单南昌做微信网站
  • 企业网站个人可以备案吗wordpress 添加ico
  • 绍兴市中等专业学校网站网站服务器租用的
  • 淘宝店铺不允许发布网站建设了新乡市网站建设有哪些公司
  • 做一个私人网站需要多少钱全国建设教育联盟统一平台网站
  • 如何做分享赚钱的网站百度一下首页百度
  • 做网站图片属性wordpress 白边
  • 深圳网站建设推荐q479185700顶上优秀设计案例作品
  • 郑州网站建设炉石校园网站平台建设
  • 合肥微网站做互助盘网站
  • 临沂做网站公司网页设计范文
  • 福州招聘网站有哪几个做个app需要多少费用
  • 赣州市经开区住房和建设局网站公司起名字大全免费四个字
  • pc端的网站设计方案网站展示重点
  • 网站开发公司深圳厦门微网站制作
  • 金融视频直播网站开发网站防恶意注册
  • 十堰网站建设哪家好出版社网站建设方案
  • 高校建设思政教育网站案例公司网站页脚
  • 电子商务网站的建设包含哪些流程图万网上传网站
  • 网站运营策划书邯郸有做网站的吗
  • 江安县建设招标网站网站优化 网站建设公司
  • wwr下载建设网站都江堰城乡建设局网站
  • 广州网站建设免费电商网站运营策划
  • 网站导航界面简单的网站制作
  • 如何做购物返佣金网站百度推广怎么做免费
  • 全球网站流量排名100服装网站建设需要什么内容
  • 天津平台网站建设企业东莞商城小程序制作
  • 如何建设物流网站写一份开网店策划书
  • html 购物网站网络营销成功案例有哪些
  • 北京哪家做网站和网络推广好的怎么做纪念网站