网站优化工作安排,南通网站建设方案咨询,合肥网络公司排名,婚纱网站建设案例项目后端部分统一解决方案 文章目录 项目后端部分统一解决方案一、异步响应规范格式类二、MD5加密工具类三、JwtHelper工具类四、CrosFilter过滤器 一、异步响应规范格式类
Result类
package com.pro.common;/*** 全局统一返回结果类**/
public class ResultT {// 返…项目后端部分统一解决方案 文章目录 项目后端部分统一解决方案一、异步响应规范格式类二、MD5加密工具类三、JwtHelper工具类四、CrosFilter过滤器 一、异步响应规范格式类
Result类
package com.pro.common;/*** 全局统一返回结果类**/
public class ResultT {// 返回码private Integer code;// 返回消息private String message;// 返回数据private T data;public Result(){}// 返回数据protected static T ResultT build(T data) {ResultT result new ResultT();if (data ! null)result.setData(data);return result;}public static T ResultT build(T body, Integer code, String message) {ResultT result build(body);result.setCode(code);result.setMessage(message);return result;}public static T ResultT build(T body, ResultCodeEnum resultCodeEnum) {ResultT result build(body);result.setCode(resultCodeEnum.getCode());result.setMessage(resultCodeEnum.getMessage());return result;}/*** 操作成功* param data baseCategory1List* param T* return*/public staticT ResultT ok(T data){ResultT result build(data);return build(data, ResultCodeEnum.SUCCESS);}public ResultT message(String msg){this.setMessage(msg);return this;}public ResultT code(Integer code){this.setCode(code);return this;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code code;}public String getMessage() {return message;}public void setMessage(String message) {this.message message;}public T getData() {return data;}public void setData(T data) {this.data data;}
}ResultCodeEnum 枚举类
package com.pro.common;
/*** 统一返回结果状态信息类**/
public enum ResultCodeEnum {SUCCESS(200,success),USERNAME_ERROR(501,usernameError),PASSWORD_ERROR(503,passwordError),NOTLOGIN(504,notLogin),USERNAME_USED(505,userNameUsed);private Integer code;private String message;private ResultCodeEnum(Integer code, String message) {this.code code;this.message message;}public Integer getCode() {return code;}public String getMessage() {return message;}
}二、MD5加密工具类
package com.pro.util;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public final class MD5Util {public static String encrypt(String strSrc) {try {char hexChars[] { 0, 1, 2, 3, 4, 5, 6, 7, 8,9, a, b, c, d, e, f };byte[] bytes strSrc.getBytes();MessageDigest md MessageDigest.getInstance(MD5);md.update(bytes);bytes md.digest();int j bytes.length;char[] chars new char[j * 2];int k 0;for (int i 0; i bytes.length; i) {byte b bytes[i];chars[k] hexChars[b 4 0xf];chars[k] hexChars[b 0xf];}return new String(chars);} catch (NoSuchAlgorithmException e) {e.printStackTrace();throw new RuntimeException(MD5加密出错 e);}}
}三、JwtHelper工具类
package com.pro.util;import com.alibaba.druid.util.StringUtils;
import io.jsonwebtoken.*;import java.util.Date;public class JwtHelper {private static long tokenExpiration 24*60*60*1000;private static String tokenSignKey 123456;//生成token字符串public static String createToken(Long userId) {String token Jwts.builder().setSubject(YYGH-USER).setExpiration(new Date(System.currentTimeMillis() tokenExpiration)).claim(userId, userId).signWith(SignatureAlgorithm.HS512, tokenSignKey).compressWith(CompressionCodecs.GZIP).compact();return token;}//从token字符串获取useridpublic static Long getUserId(String token) {if(StringUtils.isEmpty(token)) return null;JwsClaims claimsJws Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);Claims claims claimsJws.getBody();Integer userId (Integer)claims.get(userId);return userId.longValue();}//判断token是否有效public static boolean isExpiration(String token){try {boolean isExpire Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token).getBody().getExpiration().before(new Date());//没有过期有效返回falsereturn isExpire;}catch(Exception e) {//过期出现异常返回truereturn true;}}
}步骤
前端登陆时发送登陆请求后端校验成功则将用户id加密到token中返回给前端前端收到 token 存到 localStorage 或 sessionStorage 中后续发送请求时都将 token 放到请求头中带给后端
且前端在路由跳转前都需校验是否存在 token 才进行页面跳转使用路由前置守卫
四、CrosFilter过滤器
package com.pro.filters;import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;WebFilter(/*)
public class CrosFilter implements Filter {Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletResponse response (HttpServletResponse) servletResponse;HttpServletRequest request (HttpServletRequest) servletRequest;response.setHeader(Access-Control-Allow-Origin, *);response.setHeader(Access-Control-Allow-Methods, POST, GET, OPTIONS, DELETE, HEAD);response.setHeader(Access-Control-Max-Age, 3600);response.setHeader(Access-Control-Allow-Headers, access-control-allow-origin, authority, content-type, version-info, X-Requested-With);// 非预检请求,放行即可,预检请求,则到此结束,不需要放行if(!request.getMethod().equalsIgnoreCase(OPTIONS)){filterChain.doFilter(servletRequest, servletResponse);}}
}如果使用的是spring boot用一个 CrossOrigin 就可以解决跨域问题或者实现 WebMvcConfigurer 接口配置全局允许跨域