返回顶部
首页 > 资讯 > 后端开发 > Python >ssm 使用token校验登录的实现
  • 950
分享到

ssm 使用token校验登录的实现

2024-04-02 19:04:59 950人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

背景 token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。 当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需

背景

token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。
当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。
简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)

使用场景

  •  token 还能起到反爬虫的作用,当然爬虫也是有突破的方法的,尽管如此还是能减少一部分爬虫访问服务器的所带来的负载。相对的爬虫技术门槛变高了。
  • 使用session也能达到用户验证的目的 、但是session 是消耗服务器的内存,在对性能要求较高的项目中 ,开发中该技术相较于token已经过时

补充

  • token主要使用于在广大的安卓开发中
  • 使用springMVC拦截器实现

使用方法

Maven SSM项目中pom.xml 配置 中引用jar

在这里插入图片描述


		<!--token生成-->
		<dependency>
		    <groupId>com.auth0</groupId>
		    <artifactId>java-Jwt</artifactId>
		    <version>3.3.0</version>
		</dependency>

创建JwtUtil 工具


package xyz.amewin.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.alGorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;


public class JwtUtil {
    
    private static final long EXPIRE_TIME = 24 * 60 * 60 * 1000;
    
    private static final String TOKEN_SECRET = "f26e587c28064d0e855e72c0a6a0e618";

    
    public static boolean verify(String token) {
        try {
            Algorithm algorithm = Algorithm.HMac256(TOKEN_SECRET);
            JWTVerifier verifier = JWT.require(algorithm)
                    .build();
            DecodedJWT jwt = verifier.verify(token);
            return true;
        } catch (Exception exception) {
            return false;
        }
    }

    
    public static String getUsername(String token) {
        try {
            DecodedJWT jwt = JWT.decode(token);
            return jwt.getClaim("loginName").asString();
        } catch (JWTDecodeException e) {
            return null;
        }
    }

    
    public static String getUserId(String token) {
        try {
            DecodedJWT jwt = JWT.decode(token);
            return jwt.getClaim("userId").asString();
        } catch (JWTDecodeException e) {
            return null;
        }
    }

    
    public static String sign(String username,String userId) {
        try {
//            过期时间
            Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
//            私钥及加密算法
            Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
//            设置头部信息
            Map<String, Object> header = new HashMap<>(2);
            header.put("typ", "JWT");
            header.put("alg", "HS256");
            // 附带username,userId信息,生成签名
            return JWT.create()
                    .withHeader(header)
                    .withClaim("loginName", username)
                    .withClaim("userId",userId)
                    .withExpiresAt(date)
                    .sign(algorithm);
        } catch (UnsupportedEncodingException e) {
            return null;
        }
    }

}

创建TokenInterceptor 拦截器


package xyz.amewin.interceptor;

import com.alibaba.fastJSON.jsONObject;
import org.springframework.WEB.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import xyz.amewin.util.apiResponse;
import xyz.amewin.util.Contant;
import xyz.amewin.util.JwtUtil;
import javax.servlet.Http.Cookie;
import javax.servlet.http.httpservletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;


public class TokenInterceptor implements HandlerInterceptor {

    

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("执行方法之前执行这步操作!");
        response.setCharacterEncoding("utf-8");

        Cookie cookie=getCookieByName(request,"_COOKIE_NAME");
        //如果已经登录,不拦截
        if (null != cookie) {
            //验证token是否正确
            boolean result = JwtUtil.verify(cookie.getValue());
            if (!result) {
                return false;
            }
            return true;
        }
        //如果没有登录,则跳转到登录界面
        else {
            //重定向 第一种 调用控制器 方法
            response.sendRedirect(request.getContextPath() + "/login");
            //重定向 第二种 重定向方法
			//            request.getRequestDispatcher("WEB-INF/jsp/login.jsp").forward(request, response);
			//            System.out.println(request.getContextPath());
            return false;
            
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }

    
    public static Cookie getCookieByName(HttpServletRequest request, String name) {
        Map<String, Cookie> cookieMap = ReadCookieMap(request);
        if (cookieMap.containsKey(name)) {
            Cookie cookie =  cookieMap.get(name);
            return cookie;
        } else {
            return null;
        }
    }
    
    private static Map<String, Cookie> ReadCookieMap(HttpServletRequest request) {
        Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
        Cookie[] cookies = request.getCookies();
        if (null != cookies) {
            for (Cookie cookie : cookies) {
                cookieMap.put(cookie.getName(), cookie);
            }
        }
        return cookieMap;
    }

    
    private void responseMessage(HttpServletRequest request, HttpServletResponse response, PrintWriter out, ApiResponse apiResponse) throws IOException {
        response.setContentType("application/json; charset=utf-8");
        out.print(JSONObject.toJSONString(apiResponse));
        out.flush();
        out.close();
    }
}


spring-mvc.xml配置拦截器:

在这里插入图片描述


			<!--自定义拦截器-->
            <mvc:interceptors>
                <!--		验证是否登录 通过cookie -->
                <mvc:interceptor>
                    <!-- 拦截所有mvc控制器 -->
                    <mvc:mapping path="/**"/>
        			<mvc:exclude-mapping path="/checkLogin"/>
                    <bean class="xyz.amewin.interceptor.TokenInterceptor"></bean>
                </mvc:interceptor>
             
            </mvc:interceptors>

在控制器中使用


				//查询数据库,登录
 				PwUser pwUser = loginService.jsonLogin(username, passWord);
                if (pwUser != null) {
                    json.setSuccess(true);
                    json.setMsg("登录成功!");
                    String token = JwtUtil.sign(pwUser.getUsernuber(), pwUser.getUserid().toString());
                    if (token != null) {
                        Cookie cookie = new Cookie("_COOKIE_NAME", token);
                        cookie.setMaxAge(3600);//设置token有效时间
                        cookie.setPath("/");
                        response.addCookie(cookie);
                    }else{
                    json.setMsg("密码或账号错误!");
					}
                } else {
                    json.setMsg("密码或账号错误!");

                }

最后一点要web.xml 中配置加载spring-mvc拦截器


    <!-- 3.Servlet 前端控制器 -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
<!--            路径-->
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
<!--        自动加载-->
        <load-on-startup>1</load-on-startup>
        <!-- <async-supported>true</async-supported> -->
    </servlet>

到此这篇关于ssm 使用token校验登录的实现的文章就介绍到这了,更多相关ssm token校验登录内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: ssm 使用token校验登录的实现

本文链接: https://lsjlt.com/news/124183.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ssm 使用token校验登录的实现
    背景 token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。 当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需...
    99+
    2024-04-02
  • 怎么在ssm中利用token校验登录
    怎么在ssm中利用token校验登录?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用场景 token 还能起到反爬虫的作用,当然爬虫也是有突破的方法的,尽管如此还是...
    99+
    2023-06-14
  • VUE实现token登录验证
    本文实例为大家分享了VUE实现token登录验证的具体代码,供大家参考,具体内容如下 实现这个登录功能的过程真是一波三折,中途出现了bug,整了两三天才解决了问题,心力交瘁,简直一个...
    99+
    2024-04-02
  • Vue实现用户登录及token验证
    在前后端完全分离的情况下,Vue项目中实现token验证大致思路如下: 1、第一次登录的时候,前端调后端的登陆接口,发送用户名和密码 2、后端收到请求,验证用户名和密码,验证成功,就...
    99+
    2024-04-02
  • Java如何实现Token登录验证
    这篇文章主要介绍“Java如何实现Token登录验证”,在日常操作中,相信很多人在Java如何实现Token登录验证问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java如何实现Token登录验证”的疑惑有所...
    99+
    2023-07-05
  • SpringBoot登录验证token拦截器的实现
    目录注解定义token生成与验证拦截器定义拦截器配置定义拦截器的方法执行类注解使用返回值-全局异常类定义各种测试不传token制造可行的假token伪造token测试拓展:从请求中获...
    99+
    2024-04-02
  • vue实现token登录验证的完整实例
    目录token可用于登录验证和权限管理。登录页 -----Login.vue路由守卫 ----- router/index.js封装axios 添加请求拦截器 在每次请求之前进行的操...
    99+
    2024-04-02
  • Java实现Token登录验证的项目实践
    目录一、JWT是什么?二、使用步骤1.项目结构2.相关依赖3.数据库4.相关代码三、测试结果一、JWT是什么? 在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流程...
    99+
    2023-03-19
    Java Token登录验证 Java 登录验证
  • SpringBoot集成JWT实现Token登录验证
    目录 1.1 JWT是什么? 1.2 JWT主要使用场景 1.3 JWT请求流程 1.4 JWT结构 二,SpringBoot集成JWT具体实现过程 2.1添加相关依赖 2.2自定义跳出拦截器的注解 2.3自定义全局统一返回值方法,异常类...
    99+
    2023-09-06
    spring boot 后端 java
  • SSM项目使用拦截器实现登录验证功能
    目录登录接口实现拦截器类代码实现配置文件实现登录接口实现 public User queryUser(String UserName, String Password,HttpSe...
    99+
    2024-04-02
  • 怎么用vue实现登录注册及token验证
    本篇内容主要讲解“怎么用vue实现登录注册及token验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用vue实现登录注册及token验证”吧!1. 利用router.beforeEach...
    99+
    2023-07-04
  • ssm项目实现用户登陆持久化(token)
    用户登录持久化就是每次访问不用账号密码来校验身份,在用户登录第一次之后会返回一个token字符串,之后的访问客户端将这个token加到请求体里发给服务器就可以验证身份了。 利用Jed...
    99+
    2024-04-02
  • SpringBoot使用Sa-Token实现登录认证
    目录一、设计思路二、登录与注销三、会话查询四、Token 查询五、来个小测试,加深一下理解一、设计思路 对于一些登录之后才能访问的接口(例如:查询我的账号资料),我们通常的做法是增加...
    99+
    2023-05-14
    SpringBoot Sa-Token登录认证 SpringBoot 登录认证
  • SpringBoot登录验证token拦截器如何实现
    这篇文章主要讲解了“SpringBoot登录验证token拦截器如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot登录验证token拦截器如何实现”吧!用户访问接口验...
    99+
    2023-07-02
  • Java登录功能实现token生成与验证
    一、token与cookie相比较的优势 1、支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的; 2、无状态化,服务端无需存储token,只...
    99+
    2024-04-02
  • 使用SpringSecurity 进行自定义Token校验
    背景 Spring Security默认使用「用户名/密码」的方式进行登陆校验,并通过cookie的方式存留登陆信息。在一些定制化场景,比如希望单独使用token串进行部分页面的访问...
    99+
    2024-04-02
  • SSM项目中如何使用拦截器实现登录验证功能
    小编给大家分享一下SSM项目中如何使用拦截器实现登录验证功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!登录接口实现public User ...
    99+
    2023-06-28
  • gogin+token(JWT)验证实现登陆验证
    1.准备 go get github.com/dgrijalva/jwt-go go get github.com/gin-gonic/gin  2.代码 package ...
    99+
    2024-04-02
  • vue获取token如何实现token登录
    目录vue获取token 实现token登录使用token做登录验证的思路大致如下实际步骤vue中token的处理传统的token处理VUEX的存储方法项目中的token处理方法vu...
    99+
    2024-04-02
  • vue中如何实现登录注册及token验证
    这篇文章主要介绍了vue中如何实现登录注册及token验证,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体实现代码如下:1. 利用rout...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作