legongju.com
我们一直在努力
2025-01-10 03:23 | 星期五

java如何实现jwt单点登录

?Java???JWT(JSON Web Token)????(SSO)??????,????JWT???JWT????????????????????????:

1. ????

??,???????????JWT?????????????Maven,???pom.xml???????:


    io.jsonwebtoken
    jjwt-api
    0.11.2


    io.jsonwebtoken
    jjwt-impl
    0.11.2
    runtime


    io.jsonwebtoken
    jjwt-jackson
    0.11.2
    runtime

2. ??JWT

???????JWT?????????????????????:

import io.jsonwebtoken.*;
import java.util.Base64;
import java.util.Date;

public class JwtUtil {

    private static final String SECRET_KEY = "yourSecretKey"; // ???????????
    private static final long EXPIRATION_TIME = 86400000; // 24??

    public static String createToken(String username) {
        return Jwts.builder()
                .setSubject(username)
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
                .signWith(SignatureAlgorithm.HS512, SECRET_KEY)
                .compact();
    }

    public static String getUsernameFromToken(String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(token)
                .getBody();
        return claims.getSubject();
    }

    public static boolean isTokenExpired(String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(token)
                .getBody();
        return claims.getExpiration().before(new Date());
    }
}

3. ????????

????????????????:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class JwtSSOFilter {

    @Override
    public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException {
        String token = request.getHeader("Authorization");

        if (token == null || !JwtUtil.isTokenValid(token)) {
            response.sendRedirect("/login");
            return;
        }

        String username = JwtUtil.getUsernameFromToken(token);
        request.setAttribute("username", username);

        chain.doFilter(request, response);
    }
}

4. ?????

???Web????????,??????????JWT???????????:

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter(urlPatterns = "/*")
public class JwtSSOFilterConfig implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        JwtSSOFilter.doFilter((HttpServletRequest) request, (HttpServletResponse) response, chain);
    }

    @Override
    public void destroy() {
    }
}

5. ??????

???????????,????????????????,??????????JWT????????




    
    Login


    

Login





6. ??????

???????????,??JWT????????

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // ??????????????????
        if ("admin".equals(username) && "password".equals(password)) {
            String token = JwtUtil.createToken(username);
            response.setHeader("Authorization", token);
            response.sendRedirect("/home");
        } else {
            response.sendRedirect("/login?error=Invalid username or password");
        }
    }
}

7. ????

??????,?????????????




    
    Home


    

Welcome, !

??

??????????Java???JWT?????????????????,??????????????,???????HTTPS?????????

未经允许不得转载 » 本文链接:https://www.legongju.com/article/42758.html

相关推荐

  • 如何自定义Java的转义规则

    如何自定义Java的转义规则

    在 Java 中,字符串中的转义字符是以反斜杠(\)开头的。要自定义 Java 的转义规则,您需要创建一个方法来处理字符串中的特殊字符,并将它们替换为您希望使用的转...

  • Java中如何避免转义字符的冲突

    Java中如何避免转义字符的冲突

    在Java中,转义字符是那些在字符串或字符常量中表示特殊含义的字符。例如,反斜杠(\)用于表示转义字符的开始,双引号(")用于表示字符串的开始和结束等。当你...

  • Java转义字符在正则表达式中的应用

    Java转义字符在正则表达式中的应用

    在Java中,正则表达式中的特殊字符需要使用转义字符(\)进行转义。这是因为这些特殊字符在正则表达式中具有特殊含义,例如点(.)表示任意字符,星号(*)表示零...

  • 如何处理Java中的特殊字符转义

    如何处理Java中的特殊字符转义

    在Java中,特殊字符需要使用转义字符(\)进行处理。这些特殊字符包括:双引号(")、单引号(')、反斜杠(\)以及其他一些控制字符,如换行符(\n)和制表符(...

  • java如何实现审核流程

    java如何实现审核流程

    在Java中实现审核流程通常涉及以下几个步骤: 定义审核流程模型:首先需要定义审核流程的模型,包括审核步骤、审核人员、审核条件等。可以使用类图来表示这个模型...

  • java如何实现网络直播

    java如何实现网络直播

    在Java中实现网络直播,通常需要以下几个步骤: 选择流媒体服务器:首先,你需要一个流媒体服务器来处理视频流的推送和拉取。常见的流媒体服务器有Nginx-RTMP、W...

  • java聊天系统的实现方法是什么

    java聊天系统的实现方法是什么

    Java聊天系统的实现可以通过多种方法和技术,以下是几种主要的实现方法:
    基于Socket的聊天系统 技术选型:使用Java的Socket编程技术,可以实现客户端与服务...

  • 基于java扫雷游戏的设计与实现

    基于java扫雷游戏的设计与实现

    扫雷游戏是一种经典的计算机游戏,它要求玩家在一个网格中清除所有非地雷方块,同时避开地雷。下面是一个简单的Java实现,包括游戏界面、逻辑和用户交互。
    ...