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

写作网站原码如何开发自己的小程序

写作网站原码,如何开发自己的小程序,福州网站制作培训,wordpress页面的设置一、简述 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://www.dtcms.com/wzjs/121400.html

相关文章:

  • 做建材一般去什么网站宣传河南省郑州市金水区
  • 哪个网站平面设计做的好网站如何快速收录
  • 济南网站建设有限公司关键词app下载
  • 合肥高端网站建设设计公司关键词排名优化公司哪家好
  • 网站建设所需的基本内容地推团队
  • 旅游网站的设计思路bt搜索引擎
  • 北京网站搭建方案谷歌搜索引擎优化seo
  • 企业手机网站建设价位郑州seo网站管理
  • 做网站建设公司企业百度关键词seo排名软件
  • 在常州青之锋做网站客服怎么样百度搜索推广产品
  • 西宁网站设计高端seo北京公司
  • 19楼网站模板实时热搜榜榜单
  • 重庆高端网站设计网络营销推广的
  • 海南万宁市q群排名优化软件
  • 企业运营网站建设社群营销
  • 苏州市住房建设局网站首页网络营销型网站
  • 找网络公司做网站网上电商怎么做
  • 龙岗做网站公司哪家好网络营销的作用和意义
  • 海南房产金昌网站seo
  • 如何做网站拓扑结构图做seo必须有网站吗
  • 做的好的电商网站项目百度seo优化系统
  • 技术难度高的网站开发百度推广好不好做
  • 建设银行交学费网站没经验怎么开广告公司
  • 网站用户黏度表现在外贸网站平台有哪些
  • 点网站建设网站seo推广优化
  • 宁夏做网站天津seo结算
  • 政府网站建设和管理总结百度快照怎么弄
  • 网站设计要求网站app开发公司
  • 中山市企业网站seo营销工具专注网站建设服务机构
  • wordpress美容主题石家庄seo网络优化的公司