国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【JavaWeb】項目后端部分統(tǒng)一解決方案

這篇具有很好參考價值的文章主要介紹了【JavaWeb】項目后端部分統(tǒng)一解決方案。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

項目后端部分統(tǒng)一解決方案

一、異步響應規(guī)范格式類

  • Result類
package com.pro.common;

/**
 * 全局統(tǒng)一返回結果類
 *
 */
public class Result<T> {
    // 返回碼
    private Integer code;
    // 返回消息
    private String message;
    // 返回數(shù)據(jù)
    private T data;
    public Result(){}
    // 返回數(shù)據(jù)
    protected static <T> Result<T> build(T data) {
        Result<T> result = new Result<T>();
        if (data != null)
            result.setData(data);
        return result;
    }
    public static <T> Result<T> build(T body, Integer code, String message) {
        Result<T> result = build(body);
        result.setCode(code);
        result.setMessage(message);
        return result;
    }
    public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {
        Result<T> result = build(body);
        result.setCode(resultCodeEnum.getCode());
        result.setMessage(resultCodeEnum.getMessage());
        return result;
    }
    /**
     * 操作成功
     * @param data  baseCategory1List
     * @param <T>
     * @return
     */
    public static<T> Result<T> ok(T data){
        Result<T> result = build(data);
        return build(data, ResultCodeEnum.SUCCESS);
    }
    public Result<T> message(String msg){
        this.setMessage(msg);
        return this;
    }
    public Result<T> 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;
/**
 * 統(tǒng)一返回結果狀態(tài)信息類
 *
 */
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字符串獲取userid
    public static Long getUserId(String token) {
        if(StringUtils.isEmpty(token)) return null;
        Jws<Claims> 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());
            //沒有過期,有效,返回false
            return isExpire;
        }catch(Exception e) {
            //過期出現(xiàn)異常,返回true
            return true;
        }
    }
}

步驟:

  1. 前端登陸時發(fā)送登陸請求,后端校驗,成功則將用戶id加密到token中,返回給前端
  2. 前端收到 token 存到 localStorage 或 sessionStorage 中
  3. 后續(xù)發(fā)送請求時都將 token 放到請求頭中,帶給后端

且前端在路由跳轉(zhuǎn)前都需校驗是否存在 token 才進行頁面跳轉(zhuǎn)(使用路由前置守衛(wèi))

四、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 {
    @Override
    public 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 就可以解決跨域問題,或者實現(xiàn) WebMvcConfigurer 接口,配置全局允許跨域文章來源地址http://www.zghlxwxcb.cn/news/detail-755968.html

到了這里,關于【JavaWeb】項目后端部分統(tǒng)一解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • WhaleScheduler為銀行業(yè)全信創(chuàng)環(huán)境打造統(tǒng)一調(diào)度管理平臺解決方案

    數(shù)字金融是數(shù)字經(jīng)濟的重要支撐和驅(qū)動力。近年來,我國針對數(shù)字金融的發(fā)展政策頻頻出臺,《金融科技發(fā)展規(guī)劃 (2022-2025年)》、《“十四五”數(shù)字經(jīng)濟發(fā)展規(guī)劃》、《關于銀行業(yè)保險業(yè)數(shù)字化轉(zhuǎn)型的指導意見》、《金融標準化“十 四五”發(fā)展規(guī)劃》等相繼發(fā)布,頂層設

    2024年04月22日
    瀏覽(33)
  • 后端返回圖片,前端接收并顯示的解決方案

    后端通過二進制流的形式,寫入response中 controller層 service層 axios接受數(shù)據(jù)時,responseType 默認返回數(shù)據(jù)類型是 json,必須將其改為返回數(shù)據(jù)類型 blob。否則axois無法正確解析數(shù)據(jù)。 這里的http.request是對axios的封裝,把他當作axios用就行 vue界面渲染 后端接口,最好不要有返回值,

    2024年02月12日
    瀏覽(158)
  • 前后端分離 后端獲取不到header解決方案

    前后端分離 后端獲取不到header解決方案

    我這里只是把重要的邏輯放在里面,如果要看所有文件的話就太多了 這個案例不要拿來用,這個是有問題的,我只是講一下問題在哪

    2024年02月12日
    瀏覽(27)
  • IDEA鏈接MySQL數(shù)據(jù)庫遇到的部分問題及解決方案

    合理懷疑MySQL是不是克我,上次配環(huán)境配到崩潰就是因為MySQL安裝失敗,這次是因為鏈接不上IDEA 閑話少敘,直接看代碼、報錯信息以及解決方式: 代碼: 報錯信息:Tue Dec 12 01:47:57 CST 2023 WARN: Establishing SSL connection without server\\\'s identity verification is not recommended. According to MySQL 5

    2024年02月05日
    瀏覽(24)
  • 分享后端解決跨域問題的三種方案

    分享后端解決跨域問題的三種方案

    跨源資源共享( CORS——Cross-Origin Resource Sharing ,跨源資源共享,或通俗地譯為跨域資源共享)是一種基于 HTTP 頭的機制,該機制通過允許服務器標示除了它自己以外的其它源(域、協(xié)議或端口),使得瀏覽器允許這些源訪問加載自己的資源??缭促Y源共享還通過一種機制來

    2024年02月02日
    瀏覽(29)
  • 一站式統(tǒng)一返回值封裝、異常處理、異常錯誤碼解決方案—最強的Sping Boot接口優(yōu)雅響應處理器

    作者:京東物流?覃玉杰 Graceful Response是一個Spring Boot體系下的優(yōu)雅響應處理器,提供一站式統(tǒng)一返回值封裝、異常處理、異常錯誤碼等功能。 使用Graceful Response進行web接口開發(fā)不僅可以節(jié)省大量的時間,還可以提高代碼質(zhì)量,使代碼邏輯更清晰。 強烈推薦你花3分鐘學會它!

    2024年02月03日
    瀏覽(23)
  • Vue配合Nginx部署出現(xiàn)404、頁面無法跳轉(zhuǎn)、后端請求失敗問題解決方案

    常見問題有: 1、部署后,打開地址可以看到,但是刷新后出現(xiàn)404。 2、Vue的路由資源并不一定是真實路徑,導致頁面無法跳轉(zhuǎn)或其他資源加載問題。 3、請求后端接口地址失敗。

    2024年02月13日
    瀏覽(97)
  • postman后端測試時invalid token報錯+token失效報錯解決方案

    postman后端測試時invalid token報錯+token失效報錯解決方案

    沒有添加postman的token信息 寫了token但是token信息寫的是錯的,會提示token失效

    2024年01月19日
    瀏覽(30)
  • 前端jd要求:了解一門后端開發(fā)語言優(yōu)先 解決方案之Node.js

    作為前端開發(fā)者,了解一門后端開發(fā)語言可以為我們提供更多的職業(yè)機會和技術優(yōu)勢。在當今的技術領域中,前后端分離的開發(fā)模式已經(jīng)成為主流,前端和后端的協(xié)作和溝通變得越來越緊密。因此,作為前端開發(fā)者,學習一門后端語言已經(jīng)成為提高自己技能的重要途徑。 以下

    2024年02月12日
    瀏覽(22)
  • uniapp 開發(fā)App使用微信H5支付解決方案(包含前后端,后端用的thinkphp)

    我們在開發(fā)app常常需要接入支付功能,但是有時候出于包體積或?qū)徍说囊蛩?,并不想接入支付相關的sdk,這個時候,就可以考慮使用 h5支付 完成購買服務,只需要訪問后端返回的 h5支付鏈接 即可,便捷而簡單。 話不多說,進入正題! 前往微信商戶平臺 - 產(chǎn)品中心 - 我的產(chǎn)品

    2024年02月06日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包