• 使用Filter AND Interceptor校验等录(全网独一份,机不可失)


    说明:基于spring boot进行的校验

    1.熟悉如何使用jwt令牌。(不会的看这里:带你领略JWTl令牌的魅力!!!-CSDN博客

     Filter和Interceptor共用文件:(可以仿照,根据你的实际情况)

    controller层代码:

    1. /*
    2. * Copyright (c) 2020, 2023, All rights reserved.
    3. *
    4. */
    5. package com.itheima.controller;
    6. import com.itheima.pojo.Emp;
    7. import com.itheima.pojo.Result;
    8. import com.itheima.service.EmpService;
    9. import com.itheima.utils.JwtUtils;
    10. import lombok.extern.slf4j.Slf4j;
    11. import org.springframework.beans.factory.annotation.Autowired;
    12. import org.springframework.web.bind.annotation.PostMapping;
    13. import org.springframework.web.bind.annotation.RequestBody;
    14. import org.springframework.web.bind.annotation.ResponseBody;
    15. import org.springframework.web.bind.annotation.RestController;
    16. import java.util.HashMap;
    17. import java.util.Map;
    18. /**
    19. *

      Project: tlias-web-management - LoginController

    20. *

      Powered by scl On 2023-10-16 14:16:46

    21. *

      描述:

    22. *
    23. * @author 孙臣龙 [1846080280@qq.com]
    24. * @version 1.0
    25. * @since 17
    26. */
    27. @Slf4j
    28. @RestController
    29. public class LoginController {
    30. @Autowired
    31. private EmpService empService;
    32. @PostMapping("/login")
    33. public Result login(@RequestBody Emp emp) {
    34. log.info("员工登录:{}", emp);
    35. Emp e = empService.login(emp);
    36. //登录成功生成令牌,下发令牌
    37. if (e != null) {
    38. Map climas = new HashMap<>();
    39. climas.put("id", e.getId());
    40. climas.put("name", e.getName());
    41. climas.put("username", e.getUsername());
    42. String s = JwtUtils.generateJwt(climas);
    43. return Result.success(s);
    44. }
    45. return Result.error("用户名或密码错误");
    46. }
    47. }

    service层代码:

    1. package com.itheima.service;
    2. import com.itheima.pojo.Emp;
    3. import com.itheima.pojo.PageBean;
    4. import org.springframework.format.annotation.DateTimeFormat;
    5. import java.time.LocalDate;
    6. import java.util.List;
    7. /**
    8. *

      Project: tlias-web-management - EmpService

    9. *

      Powered by scl On 2023-10-12 15:31:01

    10. *

      描述:

    11. *
    12. * @author 孙臣龙 [1846080280@qq.com]
    13. * @version 1.0
    14. * @since 17
    15. */
    16. public interface EmpService {
    17. /**
    18. * 用户登录
    19. * @param emp
    20. * @return
    21. */
    22. Emp login(Emp emp);
    23. }

    mapper层代码:

    1. package com.itheima.mapper;
    2. import com.itheima.pojo.Emp;
    3. import org.apache.ibatis.annotations.Mapper;
    4. import org.apache.ibatis.annotations.Select;
    5. import java.time.LocalDate;
    6. import java.util.List;
    7. /**
    8. *

      Project: tlias-web-management - EmpMapper

    9. *

      Powered by scl On 2023-10-12 15:29:01

    10. *

      描述:

    11. *
    12. * @author 孙臣龙 [1846080280@qq.com]
    13. * @version 1.0
    14. * @since 17
    15. */
    16. @Mapper
    17. public interface EmpMapper {
    18. /**
    19. * 用户登录
    20. * @param emp
    21. * @return
    22. */
    23. @Select("select * from emp where username=#{username} and password=#{password}")
    24. Emp getByUserNameAndPwd(Emp emp);
    25. }

    Result(响应代码):

    1. package com.itheima.pojo;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. @Data
    6. @NoArgsConstructor
    7. @AllArgsConstructor
    8. public class Result {
    9. private Integer code;//响应码,1 代表成功; 0 代表失败
    10. private String msg; //响应信息 描述字符串
    11. private Object data; //返回的数据
    12. //增删改 成功响应
    13. public static Result success(){
    14. return new Result(1,"success",null);
    15. }
    16. //查询 成功响应
    17. public static Result success(Object data){
    18. return new Result(1,"success",data);
    19. }
    20. //失败响应
    21. public static Result error(String msg){
    22. return new Result(0,msg,null);
    23. }
    24. }

     2.Filter校验器:

    ①:首先需要在pom文件中添加依赖:

    1. <dependency>
    2. <groupId>io.jsonwebtokengroupId>
    3. <artifactId>jjwtartifactId>
    4. <version>0.9.1version>
    5. dependency>
    6. <dependency>
    7. <groupId>com.alibabagroupId>
    8. <artifactId>fastjsonartifactId>
    9. <version>1.2.62version>
    10. dependency>

     ②:创建Filter过滤器:

    1. /*
    2. * Copyright (c) 2020, 2023, All rights reserved.
    3. *
    4. */
    5. package com.itheima.filter;
    6. import com.alibaba.fastjson.JSONObject;
    7. import com.itheima.pojo.Result;
    8. import com.itheima.utils.JwtUtils;
    9. import jakarta.servlet.*;
    10. import jakarta.servlet.annotation.WebFilter;
    11. import jakarta.servlet.http.HttpServletRequest;
    12. import jakarta.servlet.http.HttpServletResponse;
    13. import lombok.extern.slf4j.Slf4j;
    14. import org.springframework.util.StringUtils;
    15. import java.io.IOException;
    16. import java.util.Locale;
    17. /**
    18. *

      Project: tlias-web-management - LoginCheckFilter

    19. *

      Powered by scl On 2023-10-17 16:30:20

    20. *

      描述:

    21. *
    22. * @author 孙臣龙 [1846080280@qq.com]
    23. * @version 1.0
    24. * @since 17
    25. */
    26. @Slf4j
    27. @WebFilter(urlPatterns = "/*")
    28. public class LoginCheckFilter implements Filter {
    29. @Override
    30. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    31. HttpServletResponse resp= (HttpServletResponse) servletResponse;
    32. HttpServletRequest req= (HttpServletRequest) servletRequest;
    33. //获取url
    34. String url = req.getRequestURI().toString();
    35. log.info("获取的url:{}",url);
    36. //判断url中是否包含login
    37. if (url.contains("login")){
    38. filterChain.doFilter(servletRequest,servletResponse);
    39. return;
    40. }
    41. //获取请求头的内容
    42. String jwt = req.getHeader("token");
    43. //判断jwt令牌是否存在
    44. if (!StringUtils.hasLength(jwt)){
    45. log.info("请求头token不存在");
    46. Result error = Result.error("NOT_LOGIN");
    47. String nologin = JSONObject.toJSONString(error);
    48. resp.getWriter().write(nologin);
    49. return;
    50. }
    51. //解析jtw令牌
    52. try {
    53. JwtUtils.parseJWT(jwt);
    54. } catch (Exception e) {
    55. e.printStackTrace();
    56. log.info("jwt令牌解析错误,");
    57. Result error = Result.error("NOT_LOGIN");
    58. String nologin = JSONObject.toJSONString(error);
    59. resp.getWriter().write(nologin);
    60. return;
    61. }
    62. //jwt令牌解析成功,放行
    63. log.info("放行");
    64. filterChain.doFilter(servletRequest,servletResponse);
    65. }
    66. }

    3.Interceptor拦截器:

    ①:创建拦截器:

    1. /*
    2. * Copyright (c) 2020, 2023, All rights reserved.
    3. *
    4. */
    5. package com.itheima.interceptor;
    6. import com.alibaba.fastjson.JSONObject;
    7. import com.itheima.pojo.Result;
    8. import com.itheima.utils.JwtUtils;
    9. import jakarta.servlet.http.HttpServletRequest;
    10. import jakarta.servlet.http.HttpServletResponse;
    11. import lombok.extern.slf4j.Slf4j;
    12. import org.springframework.stereotype.Component;
    13. import org.springframework.util.StringUtils;
    14. import org.springframework.web.servlet.HandlerInterceptor;
    15. import org.springframework.web.servlet.ModelAndView;
    16. /**
    17. *

      Project: tlias-web-management - LoginCheckInterceptor

    18. *

      Powered by scl On 2023-10-17 17:18:06

    19. *

      描述:

    20. *
    21. * @author 孙臣龙 [1846080280@qq.com]
    22. * @version 1.0
    23. * @since 17
    24. */
    25. @Slf4j
    26. @Component
    27. public class LoginCheckInterceptor implements HandlerInterceptor {
    28. @Override //目标资源方法运行前运行,返回true:放行,返回false:不放行
    29. public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
    30. //获取url
    31. String url = req.getRequestURI().toString();
    32. log.info("获取的url:{}",url);
    33. //判断url中是否包含login
    34. if (url.contains("login")){
    35. return true;
    36. }
    37. //获取请求头的内容
    38. String jwt = req.getHeader("token");
    39. //判断jwt令牌是否存在
    40. if (!StringUtils.hasLength(jwt)){
    41. log.info("请求头token不存在");
    42. Result error = Result.error("NOT_LOGIN");
    43. String nologin = JSONObject.toJSONString(error);
    44. resp.getWriter().write(nologin);
    45. return false;
    46. }
    47. //解析jtw令牌
    48. try {
    49. JwtUtils.parseJWT(jwt);
    50. } catch (Exception e) {
    51. e.printStackTrace();
    52. log.info("jwt令牌解析错误,");
    53. Result error = Result.error("NOT_LOGIN");
    54. String nologin = JSONObject.toJSONString(error);
    55. resp.getWriter().write(nologin);
    56. return false;
    57. }
    58. //jwt令牌解析成功,放行
    59. log.info("放行");
    60. return true;
    61. }
    62. @Override //目标资源方法后运行
    63. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    64. System.out.println("postHandle...");
    65. }
    66. @Override //最后运行
    67. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    68. System.out.println("afterCompletion...");
    69. }
    70. }

    说明一下:有实体类代码我没有上传(需要根据你自己的数据库决定),Filter和Interceptor使用一个就可以了。

  • 相关阅读:
    【Git】Git 的基本操作 -- 详解
    expect自动化交互应用程序工具
    数据结构与算法之美-读书笔记2(时间复杂度详细分析)
    Web实训项目--网页设计(附源码)
    数据库DML数据操作语言
    ant-design国际化扩展新语言
    SpringBoot--redis自定义序列化配置不生效
    实战演练 | 在 MySQL 中选择除了某一列以外的所有列
    设计数据库:一条记录/一篇文章/一篇日志 关联存储多张图片
    快速排序.
  • 原文地址:https://blog.csdn.net/qq_64847107/article/details/133890578