欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot集成JWT實現(xiàn)登錄注冊的示例代碼

 更新時間:2024年06月28日 09:48:32   作者:躺著聽Jay  
本文主要介紹了Springboot集成JWT實現(xiàn)登錄注冊的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

記錄一下使用Springboot集成JWT實現(xiàn)登錄注冊,以后有用到直接copy即可。

整體流程

依賴

<!--引入jwt-->
<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.4.0</version>
</dependency>

<!-- MD5加密依賴 -->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
</dependency>

工具類

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.huishi.entity.MapUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;

@Slf4j
public class SecurityUtils {

    public static String md5(String src) {
        return DigestUtils.md5Hex(src);
    }

    //密鑰鹽
    private static final String salt = "1a2b3c4d";


    /**
     * 密碼加密
     * @param inputPass
     * @return
     */
    public static String inputPassToFormPass(String inputPass) {
        String str = "" + salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4);
        System.out.println(str);
        return md5(str);
    }

    public static String formPassToDBPass(String formPass, String salt) {
        String str = "" + salt.charAt(0) + salt.charAt(2) + formPass + salt.charAt(5) + salt.charAt(4);
        return md5(str);
    }

    public static String inputPassToDbPass(String inputPass, String saltDB) {
        String formPass = inputPassToFormPass(inputPass);
        String dbPass = formPassToDBPass(formPass, saltDB);
        return dbPass;
    }

    /**
     * 生成token
     *
     * @param mapUser
     * @param tokenExpireTime
     * @param tokenSecret
     * @return
     */
    public static String genToken(MapUser mapUser, Integer tokenExpireTime, String tokenSecret) {
        Date expireAt = new Date(System.currentTimeMillis() + tokenExpireTime * 60 * 1000);

        return JWT.create()
                //發(fā)行人
                .withIssuer("auth0")
                //存放數(shù)據(jù)
                .withClaim("userId", mapUser.getId())
                .withClaim("username", mapUser.getUserName())
                .withClaim("password", mapUser.getPassword())
                //過期時間
                .withExpiresAt(expireAt)
                .sign(Algorithm.HMAC256(tokenSecret));
    }

    /**
     * 對token進(jìn)行驗證
     *
     * @param token
     * @param tokenSecret
     * @return
     */
    public static Boolean verifyToken(String token, String tokenSecret) {
        DecodedJWT decodedJWT = null;
        try {
            //創(chuàng)建token驗證器
            JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(tokenSecret)).withIssuer("auth0").build();
            decodedJWT = jwtVerifier.verify(token);
            log.info("token認(rèn)證通過,用戶:{},過期時間:{}", getUserName(token), decodedJWT.getExpiresAt());
        } catch (IllegalArgumentException | JWTVerificationException e) {
            //拋出錯誤即為驗證不通過
            log.error("token認(rèn)證失敗,用戶:{}", getUserName(token));
            return false;
        }
        return true;
    }

    public static String getUserName(String token) {
        return JWT.decode(token).getClaims().get("username").asString();
    }

    public static Long getUserId(String token) {
        if (token == null) return null;
        return JWT.decode(token).getClaims().get("userId").asLong();
    }

    public static String getToken(HttpServletRequest request) {
        String authHeader = request.getHeader("Authorization");
        if (authHeader != null && authHeader.startsWith("Bearer ")) {
            return authHeader.replace("Bearer ", "");
        }
        return null;
    }

}

注冊和登錄

@Override
public ResponseResult register(MapUser mapUser) {
    mapUser.setPassword(SecurityUtils.inputPassToFormPass(mapUser.getPassword()));
    return ResponseResult.success(mapUserMapper.insert(mapUser));
}

@Override
public ResponseResult login(MapUser mapUser) {

    String password = SecurityUtils.inputPassToFormPass(mapUser.getPassword());
    MapUser user = mapUserMapper.findByName(mapUser.getUserName());

    if (user == null) throw new ServiceException("用戶不存在");
    if (!password.equals(user.getPassword())) throw new ServiceException("密碼錯誤");


    String token = SecurityUtils.genToken(user, tokenExpireTime, tokenSecret);
    MapConfig mapConfig = mapConfigMapper.getByUserId(user.getId());
    Map<String, Object> result = new HashMap<>();
    result.put("token", token);
    result.put("mapConfig", mapConfig.conventEntity());
    return ResponseResult.success(result);
}

攔截器

import com.alibaba.fastjson.JSONObject;
import com.huishi.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * token攔截器
 */
@Component
@Slf4j
public class TokenInterceptor implements HandlerInterceptor {

    @Value("${token.header}")
    private String tokenHeader;

    @Value("${token.prefix}")
    private String tokenPrefix;

    @Value("${token.secret}")
    private String tokenSecret;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String authHeader = request.getHeader(tokenHeader);
        if (authHeader != null && authHeader.startsWith(tokenPrefix)) {
            String token = authHeader.replace(tokenPrefix + " ", "");
            if (SecurityUtils.verifyToken(token, tokenSecret)) return true;
        }
        String requestURI = request.getRequestURI();
        JSONObject json = new JSONObject();
        json.put("msg", "請求:" + requestURI + ",認(rèn)證失敗,無法訪問資源");
        json.put("code", "401");
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().append(json.toString());
        return false;
    }

}

配置攔截器

import com.huishi.server.interceptor.TokenInterceptor;
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 {
    @Autowired
    private TokenInterceptor tokenInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(tokenInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns("/map/user/register", "/map/user/login", "/map/plane/getNewest", "/map/plane/tracePlaneInfo",
                        "/map/config/get/**",

                        "/swagger-ui.html",
                        "/webjars/**",
                        "/swagger-resources/**");
    }
}

到此這篇關(guān)于Springboot集成JWT實現(xiàn)登錄注冊的示例代碼的文章就介紹到這了,更多相關(guān)Springboot JWT登錄注冊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評論