登录校验过滤器

  1. 会话技术
  2. JWT令牌
  3. 过滤器Filter
  4. 拦截器 interceptor

cookise

package com.it.controller;import com.it.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Slf4j
@RestController
public class SessionController {//设置cookie@GetMapping("/c1")public Result cookie1(HttpServletResponse response){response.addCookie(new Cookie("login_username","it"));  //设置cookie /响应cookiereturn Result.success();}//获取cookie@GetMapping("/c2")public Result cookie2(HttpServletRequest request){Cookie[] cookies = request.getCookies();//获取所有的cookiefor (Cookie cookie : cookies) {if (cookie.equals("login_username")){      //输出name为login_username 的cookieSystem.out.println("login_username:"+cookie.getValue());}}return Result.success();}}

session

    //往httpSession中存储值@GetMapping("/s1")public Result sessio1(HttpSession session){log.info("HttpSession-s1 :{}",session.hashCode());session.setAttribute("loginUser","mamat");return  Result.success();}// 往HttpSession 中的取值@GetMapping("/s2")public Result session2(HttpServletRequest request){HttpSession session =request.getSession();log.info("HttpSession-s2:{}",session);Object loginUser=   session.getAttribute("loginUser") ;    //从session获取数据log.info("loginUser:{}",loginUser);return Result.success(loginUser);}

 jwt令牌 引入依赖

 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency>

package com.it.utils;import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;import java.util.Date;
import java.util.Map;public class JwtUtils {public static String signKey ="itWord";  //密钥public static Long expire = 43200000L;  //密钥   一分钟等于1000 毫秒     (43200000L 12小时)//生成JWT令牌ypublic static String generateJwt(Map<String,Object> claims){String jwt= Jwts.builder().addClaims(claims).signWith(SignatureAlgorithm.HS256,signKey).setExpiration(new Date(System.currentTimeMillis()+expire)).compact();return jwt;}//解析JWT令牌public static Claims parseJWT(String jwt){Claims claims =Jwts.parser().setSigningKey(signKey).parseClaimsJwt(jwt).getBody();return  claims;}
}

JWT令牌生成调用

@PostMapping("/login")public Result login(@RequestBody Emp emp){log.info("员工登录,:{}",emp);Emp emp1 =empservice.login(emp);// 登录成功 生成令牌 下发令牌if (emp1!=null){Map<String, Object> claims =new HashMap<>();claims.put("id",emp1.getId());claims.put("name",emp1.getName());claims.put("username",emp1.getUsername());  // jwt令牌包含当前登录的员工信息String jwt = JwtUtils.generateJwt(claims);return Result.success(jwt);}return Result.error("用户名或者密码错误");}

过滤器拦截调用

package com.it.filter;import com.alibaba.fastjson.JSONObject;import com.it.pojo.Result;
import com.it.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Slf4j
@WebFilter(urlPatterns = "/*")
public class LoginCheckFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//强转HttpServletRequest rep=(HttpServletRequest) servletRequest;HttpServletResponse resp=(HttpServletResponse) servletResponse;// 1:获取请求urlString url = rep.getRequestURI().toString();log.info("请求路径:{}",url);// 2:判断请求URl中是否包含login, 如果包含说明登录操作 可以放行if (url.contains("login")){log.info("登录操作 ,放行");filterChain.doFilter(servletRequest,servletResponse);return;}// 3: 获取请求头中的令牌(token)String jwt = rep.getHeader("token");log.info("Jwt,令牌数据:{}",jwt);// 4: 判断令牌是否存在 ,如果不存在,返回错误结果 (未登录)if (!StringUtils.hasLength(jwt)){log.info("请求头token为空 返回未登录信息");Result error  = Result.error("NOT_LOGIN");// 手动转换对象-- json ----->阿里巴巴fastJsonString notLogin = JSONObject.toJSONString(error);resp.getWriter().write(notLogin);return;}// 5:解析token, 如果解析失败 。返回错误结果(未登录)try {JwtUtils.parseJWT(jwt);} catch (Exception e) {   //jwt 解析失败e.printStackTrace();log.info("解析令牌解析失败 返回未登录错误信息");Result error  = Result.error("NOT_LOGIN");// 手动转换对象-- json ----->阿里巴巴fastJsonString notLogin = JSONObject.toJSONString(error);resp.getWriter().write(notLogin);return;}// 6:放行log.info("令牌合法 放行");filterChain.doFilter(servletRequest,servletResponse);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/209861.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang 设置运行的cpu数与channel管道

介绍&#xff1a;为了充分了利用多cpu的优势&#xff0c;在Golang程序中&#xff0c;设置运行的cpu数目。 func main() {//获取系统当前cpu的数量num : runtime.NumCPU()//这里根据需求来设置整个go程序去使用几个cpuruntime.GOMAXPROCS(num)fmt.Println("num ", nu…

室内外融合便携式定位终端5G+UWB+RTK

一、介绍 便携式定位终端主要用于提供高精度的位置数据&#xff0c;支持室内UWB定位和室外北斗系统定位功能&#xff0c;支持5G公网和5G专网通信功能&#xff0c;便携式定位终端中超宽带(UWB)和实时动态(RTK)技术的集成代表了精确位置跟踪方面的重大进步。这款UWBRTK便携式定位…

Windows开启SQL Server服及1433端口

需求&#xff1a;Windows开启SQL Server服务及1433端口 目前端口没有启动 解决&#xff1a; 打开SQL Server配置管理器&#xff08;winR&#xff09; 各个sqlserver版本在textbox中输入对应的命令如下&#xff1a; SQLServerManager15.msc&#xff08;对于 SQL Server 2019 &am…

python获取阿里云云解析dns的域名解析记录

最近由于工作原因接触到阿里云的服务&#xff0c;我需要实时获取所有的域名信息&#xff0c;用于对其进行扫描&#xff0c;因此写了一个自动化爬取脚本 给需要的人分享。 &#xff08;阿里云有官方的demo&#xff0c;有兴趣的可以自己看一下&#xff0c;后面也会放链接&#xf…

高级/进阶”算法和数据结构书籍推荐

“高级/进阶”算法和数据结构书籍推荐《高级算法和数据结构》 高级算法和数据结构 为什么要选择本书 谈及为什么需要花时间学算法&#xff0c;我至少可以列举出三个很好的理由。 (1)性能&#xff1a;选择正确的算法可以显著提升应用程序的速度。仅就搜索来说&#xff0c;用二…

人工智能发展史

人工智能&#xff08;AI&#xff09;的发展史是一段跨越数十年的旅程&#xff0c;涵盖了从早期理论探索到现代技术革新的广泛内容。人工智能的发展历程展示了从最初的概念探索到现代技术突破的演变。尽管经历了多次起伏&#xff0c;但AI领域持续进步&#xff0c;不断拓展其应用…

2243:Knight Moves

文章目录 题目描述思路1. DFS2. BFS3. 动态规划 解题方法1. DFS2. BFS3. 动态规划 题目描述 题目链接 翻译如下&#xff1a; 注&#xff1a;骑士移动是和象棋里的马一样走的是日字型 你的一个朋友正在研究旅行骑士问题 &#xff08;TKP&#xff09;&#xff0c;你要找到最短的…

Android 断点调试

Android 调试 https://developer.android.google.cn/studio/debug?hlzh-cn 调试自己写的代码&#xff08;不在Android源码&#xff09; 点击 Attach debugger to Android process 图标 需要在添加断点界面手动输入函数名 但也可以不手动&#xff0c;有个技巧可以new 空proje…

个人博客搭建保姆级教程-HTML页面编写篇

选择模板 首先我们要选一个好的模板&#xff0c;然后对模板进行剪裁。我的模板是在站长之家进行下载的 素材下载-分享综合设计素材免费下载的平台-站长素材 我选的模板的具体地址是 个人博客资讯网页模板 这里需要我们学习一下在前边一篇文章里提到的HTML、JavaScript、CSS…

C++ :运算符重载

运算符重载&#xff1a; 运算符重载概念&#xff1a;对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型 运算符的重载实际是一种特殊的函数重载&#xff0c;必须定义一个函数&#xff0c;并告诉C编译器&#xff0c;当遇到该重载的运算符…

华为拆分零部件业务,长安入股,赛力斯接洽中

作者 |德新 编辑 |王博 11月26日&#xff0c;长安汽车官宣与华为在智能汽车零部件业务上的投资与合作&#xff1a; 华为拟成立一家新的公司&#xff0c;并将其在智能汽车解决方案业务上的核心技术和资源注入新公司&#xff0c;长安汽车及关联方有意投资该新公司。 参照目前长…

浮点数二分例题:数的三次方根-Java版

//浮点数二分,正常写就行,不用考虑死循环问题import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);Double n sc.nextDouble();double l -100,r 100;//数据范围是100000,开了三次方后不会超过100//小知…

【Altium designer 20】

Altium designer 20 1. Altium designer 201.1 原理图库1.1.1 上划岗 在字母前面加\在加字母1.1.2 自定义快捷键1.1.3 对齐1.1.4 在原有的电路图中使用封装1.1.5 利用excel创建IC类元件库1.1.6 现有原理图库分类以及调用1.1.7 现有原理图库中自动生成原理图库 1.2 绘制原理图1.…

质量小议35 -- SQL注入

已经记不得上次用到SQL注入是什么时候了&#xff0c;一些概念和操作已经模糊。 最近与人聊起SQL注入&#xff0c;重新翻阅&#xff0c;暂记于此。 重点&#xff1a;敏感信息、权限过大、未脱敏的输入/输出、协议、框架、数据包、明文、安全意识 SQL - Structured Query La…

打破卫浴行业冰山!九牧重构高端服务品牌“点线面”新秩序

文 | 螳螂观察 作者 | 余一 说到服务&#xff0c;你首先会想到哪个品牌&#xff1f;海底捞大概率会是其中之一。 一个餐饮品牌&#xff0c;不靠价格、口味出圈&#xff0c;而是凭借服务走向全球市场&#xff0c;古往今来或许也是头一家了&#xff0c;而无微不至的的服务&…

设计模式-结构型模式之桥接设计模式

文章目录 三、桥接模式 三、桥接模式 桥接模式&#xff08;Bridge&#xff09;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&#xff0c;使得实体类…

MySQL安装

目录 MySQL简介 MySQL安装 连接MySQL数据库 MySQL简介 MySQL是最流行的关系型数据库管理系统之一&#xff0c;属于Oracle旗下产品。由于其体积小、速度快、总体拥有成本低&#xff0c;尤其是开放源码这一特点&#xff0c;一般中小型和大型网站的开发都选择 MySQL作为网站数据…

JVM:双亲委派(未完结)

类加载 定义 一个java文件从编写代码到最终运行&#xff0c;必须要经历编译和类加载的过程&#xff0c;如下图&#xff08;图源自b站视频up主“跟着Mic学架构”&#xff09;。 编译就是把.java文件变成.class文件。类加载就是把.class文件加载到JVM内存中&#xff0c;得到一…

使用Docker安装部署Swagger Editor并远程访问编辑API文档

文章目录 Swagger Editor本地接口文档公网远程访问1. 部署Swagger Editor2. Linux安装Cpolar3. 配置Swagger Editor公网地址4. 远程访问Swagger Editor5. 固定Swagger Editor公网地址 Swagger Editor本地接口文档公网远程访问 Swagger Editor是一个用于编写OpenAPI规范的开源编…

UE5 - 虚幻引擎各模块流程图

来自虚幻官方的一些资料&#xff0c;分享一下&#xff1b; 一些模块的流程图&#xff0c;比如动画模块&#xff1a; 或角色相关流程&#xff1a; 由于图片比较大&#xff0c;上传到了网络&#xff0c;可自取&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1BQ2KiuP08c…