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

大连庄河网站建设平顶山网站建设费用

大连庄河网站建设,平顶山网站建设费用,哈尔滨营销网站建设公司,wordpress add_menu_page概述 JSON Web Token (JWT) 是一种开放标准 (RFC 7519)&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间安全地传输信息。在Web应用中&#xff0c;JWT常用于身份验证和信息交换。 依赖配置 首先需要在项目中添加JWT依赖&#xff1a; <!-- JWT依赖…

概述

JSON Web Token (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息。在Web应用中,JWT常用于身份验证和信息交换。

依赖配置

首先需要在项目中添加JWT依赖:

<!-- JWT依赖 -->
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
</dependency>

JWT工具类封装

我们创建一个JwtUtil工具类来封装JWT的生成、解析和验证逻辑:

package com.bookstore.utils;import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;import java.util.Date;
import java.util.HashMap;
import java.util.Map;@Component
public class JwtUtil {private static final String SECRET_KEY = "bookstore_secret_key";private static final long EXPIRATION_TIME = 24 * 60 * 60 * 1000; // 24小时// 生成JWT令牌public String generateToken(Integer userId, String role) {Map<String, Object> claims = new HashMap<>();claims.put("userId", userId);claims.put("role", role);return Jwts.builder().setClaims(claims).setIssuedAt(new Date()).setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)).signWith(SignatureAlgorithm.HS256, SECRET_KEY).compact();}// 解析JWT令牌public Claims parseToken(String token) {return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody();}// 验证JWT令牌public boolean validateToken(String token) {try {Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);return true;} catch (Exception e) {return false;}}
}

JWT拦截器实现

创建拦截器来验证请求中的JWT令牌:

package com.bookstore.config;import com.bookstore.utils.JwtUtil;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Component
public class JwtInterceptor implements HandlerInterceptor {@Autowiredprivate JwtUtil jwtUtil;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {// 放行OPTIONS请求if ("OPTIONS".equals(request.getMethod())) {return true;}// 从请求头获取tokenString token = request.getHeader("Authorization");if (token != null && token.startsWith("Bearer ")) {token = token.substring(7);if (jwtUtil.validateToken(token)) {Claims claims = jwtUtil.parseToken(token);// 将用户信息存入request属性中request.setAttribute("userId", claims.get("userId"));request.setAttribute("role", claims.get("role"));return true;}}response.setStatus(401);return false;}
}

MVC配置

配置拦截器并设置拦截路径:

package com.bookstore.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate JwtInterceptor jwtInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(jwtInterceptor).addPathPatterns("/**")  // 拦截所有路径.excludePathPatterns(    // 排除路径"/login","/register","/swagger-resources/**","/webjars/**","/v3/api-docs/**","/swagger-ui.html/**","/error","/favicon.ico","doc.html","/logout","/static/**","/carousel/list","/book/new","/v2/api-docs");}
}

使用示例

登录时生成令牌

在登录成功后生成JWT令牌并返回给客户端:

String token = jwtUtil.generateToken(foundUser.getId(), foundUser.getRole());

基础控制器

创建基础控制器方便获取已认证的用户信息:

import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;public class BaseController {@Autowiredprotected HttpServletRequest request;// 获取当前用户IDprotected Integer getCurrentUserId() {return (Integer) request.getAttribute("userId");}// 获取当前用户角色protected String getCurrentUserRole() {return (String) request.getAttribute("role");}// 检查是否是管理员protected boolean isAdmin() {return "admin".equals(getCurrentUserRole());}// 检查是否是普通用户protected boolean isUser() {return "user".equals(getCurrentUserRole());}
}

其他控制器可以继承BaseController来方便地获取用户信息:

@RestController
@RequestMapping("/api/books")
public class BookController extends BaseController {@GetMapping("/{id}")public ResponseEntity<Book> getBook(@PathVariable Integer id) {if (isAdmin()) {// 管理员特有逻辑}// 其他逻辑...}
}

总结

  1. JWT工具类:封装了令牌的生成、解析和验证逻辑
  2. 拦截器:自动验证请求中的JWT令牌并提取用户信息
  3. MVC配置:灵活配置需要拦截和放行的路径
  4. 基础控制器:提供便捷的方法获取当前用户信息

这种实现方式具有以下优点:

  • 无状态认证,服务端不需要存储会话信息
  • 跨域支持良好
  • 可以方便地携带用户信息
  • 适合分布式系统

在实际项目中,可以根据需求调整令牌的有效期、密钥的存储方式(如从配置中心获取)以及更精细的权限控制逻辑。


文章转载自:

http://wxWJYPdJ.zLkps.cn
http://OsZcMjtM.zLkps.cn
http://tKhIdRTc.zLkps.cn
http://TBAfQ517.zLkps.cn
http://SyZs69CR.zLkps.cn
http://4rm3gpie.zLkps.cn
http://nfZIKe6J.zLkps.cn
http://8KNodsym.zLkps.cn
http://vzr5A3Na.zLkps.cn
http://spFxJPx9.zLkps.cn
http://BHv5MetK.zLkps.cn
http://pXSjo7mN.zLkps.cn
http://FSM3MMSO.zLkps.cn
http://VsNmfHSD.zLkps.cn
http://m9JICKwc.zLkps.cn
http://dJVZ6Nr7.zLkps.cn
http://34DEYbZK.zLkps.cn
http://YVqtrm4Z.zLkps.cn
http://tvzR3EmC.zLkps.cn
http://Q2PeclLQ.zLkps.cn
http://IlrstlnU.zLkps.cn
http://rro21HdH.zLkps.cn
http://upDEhvrp.zLkps.cn
http://4vfl1h6A.zLkps.cn
http://3uwdope6.zLkps.cn
http://b8Ug3IXM.zLkps.cn
http://3b512onP.zLkps.cn
http://ENtWDgav.zLkps.cn
http://oxC4tnDw.zLkps.cn
http://Zd3Zx8xW.zLkps.cn
http://www.dtcms.com/wzjs/778767.html

相关文章:

  • android 移动网站开发网页制作基础教程视频教程 葛艳玲
  • 基层建设被哪些网站全文收录查域名解析ip
  • 网站建设推广谷得网络免费建站网站一级大录像不卡在线看网页
  • 宜昌做网站哪家最便宜wordpress自带jquery
  • 大连住建部官方网站如何做音乐分享类网站
  • 做网站的模仿还要去量宽高吗初中毕业学网站开发工程师
  • 医院网站建设报价做商城外贸网站
  • 做盗版小说网站赚钱嘛做封面电脑网站
  • 吉安做网站公司番禺网站制作价格
  • 网站建设计划书怎么写城乡建设部网站混凝土7天强度
  • 社交类网站开发需求分析惠东做网站报价
  • 局域网网站开发只做动漫的h网站
  • 医院网站竹子建站免费版
  • 成都网站的优化腾讯云可以做网站
  • 江苏大丰做网站西安网站制作哪家便宜又好
  • 做网站推广怎么说广告词关键词排名查询工具免费
  • 福州营销型网站建设企业网站建设北京公司排名
  • p2p网站制作 杭州怎样做服务型网站
  • 可以注册的网站互联网公司排名前1000个
  • 域名解析后网站怎么建设软件开发全流程
  • 做电子商务网站公司wordpress淘客主题
  • 宁波专业网站营销社区门户网站建设
  • 淘宝客网站如何做黑wordpress网站
  • 公司网站维护与更新上海最大企业前十名
  • 怎样建立一个自己的网站免费要网站开发费用短信
  • 怀柔网站整站优化公司网站开发总结800字
  • 黄岩做网站公司电话软件开发工具case
  • 网站公司 北京内蒙古住房与城乡建设部网站
  • 事业网站网站建设方案西安高端网站定制
  • 红酒企业网站模板免费下载wordpress新闻列表如何制作