【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码

这篇具有很好参考价值的文章主要介绍了【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.实现拦截器 Interceptor (以登录拦截器为例)

1.1 写一个登录拦截器普通类

  1. 实现HandlerInterceptor接口
  2. 重写preHandle方法
//检验登录状态拦截器
//实现接口HandlerInterceptor  重写方法preHandle
public class LoginInterceptor implements HandlerInterceptor {
    /*
    * 该方法返回为true,用户已登录
    * 该方法返回为false,用户未登录
    * */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //获取会话
        HttpSession session = request.getSession(false);
        if(session != null && session.getAttribute(AppVariable.USER_SESSION_KEY) != null) {
            //用户已经登录
            return true;
        }
        //未登录,则跳转到登录页面
        response.sendRedirect("/login.html");
        return false;
    }
}

2.2 设置拦截规则

  1. 加@Configuration注解
  2. 实现WebMvcConfigurer接口
  3. 重写addInterceptors方法
//设置拦截规则
// 1. 加注解@Configuration
// 2. 实现接口WebMvcConfigurer 重写方法addInterceptors
@Configuration
public class AppConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()) //参数就是第一步的普通类
                .addPathPatterns("/**")  //先拦截全部的 再排除一些不需要拦截的
                .excludePathPatterns("/css/**")
                .excludePathPatterns("/editor.md/**")
                .excludePathPatterns("/img/**")
                .excludePathPatterns("/js/**")
                .excludePathPatterns("/login.html")
                .excludePathPatterns("/reg.html")
                .excludePathPatterns("/blog_list.html")
                .excludePathPatterns("/blog_content.html")
                .excludePathPatterns("/art/detail")
                .excludePathPatterns("/user/login")
                .excludePathPatterns("/user/reg");
    }
}

2.深克隆方法 (spring提供的深克隆方法)

【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码,习题总结,java,前端,javascript


3.时间日期格式化 

  • 1. 全局日期格式化

这种方式的缺点是只对时间数据类型为date的生效,对于java8的LocalDate,LocalDateTime是不生效的。

【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码,习题总结,java,前端,javascript

  • 2.局部日期格式化

全局和局部都设置时,默认是优先局部。  由于时间格式类型的原因,最好用如下局部这种注解,全局太局限。

【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码,习题总结,java,前端,javascript
 


4.JS实现获取当前ur所有参数的公共方法

//获取当前页面url中的参数的公共方法
            function getUrlVal(key) {
                var params = location.search;
                if(params.length>1) {
                    params = location.search.substring(1);
                    var paramArr = params.split("&");
                    for(var i=0;i<paramArr.length;i++) {
                        var kv = paramArr[i].split("=");
                        if(kv[0]==key) {
                            return kv[1];
                        }
                    }
                }
                return "";
            }

5.加密算法md5

Java自带MD5码加密。

【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码,习题总结,java,前端,javascript

String password = "12345";
String md5password = DigestUtils.md5DigestAsHex(password.getBytes());

6.手写加盐算法

1.加密

  1. 该方法传入参数为用户输入的密码。
  2. 先用java自带的UUID生成一个随机数,即是得到盐值。
  3. 然后将将盐值和用户密码拼接,并用MD5加密,得到MD5加密密文。
  4. 最后拼接盐值和被MD5加密的密文,中间用$符连接。即得到最终要往数据库存的密码。该密码由65个字符组成。共65个字符。
  5. 返回值为该密文。

2.模拟加密

  1. 该方法传入参数为用户输入的密码和盐值。
  2. 先将将盐值和用户密码拼接,并用MD5加密,得到MD5加密密文。
  3. 最后拼接盐值和被MD5加密的密文,中间用$符连接。即得到密文。该密码由65个字符组成。共65个字符。
  4. 返回值也为密文。

3.判断

  1. 该方法传入参数为用户输入的密码和从数据库中得到的密码。
  2. 首先获取盐值,将从数据库中得到的密码进行分割得到盐值。
  3. 调用模拟加密方法。生成一个模拟的密文。
  4. 比较从数据库中得到的密码和模拟生成的密文是否相同。
  5. 返回boolean类型。

3.代码

// 加盐算法
public class PasswordUtils {
    // 1. 加盐并生成密码
    public static String encrypt(String password) {
        // 1.产生盐值 128位
        String salt = UUID.randomUUID().toString().replace("-","");
        // 2.拼接盐值和密码,再对这个整体使用md5加密,得到一个128位的密文
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 3.最终密码格式 【128位的盐值+$+128位的密文】 并保存到数据库 共65个字符
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    // 2.解密算法
    // 解密还是根据用户的密码再次模拟生成加盐后的密文,再对比数据库中的密文,相同就说明正确
    // 和上面写法一样,只是盐值固定了
    public static String encrypt(String password,String salt) {
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    // 3.密码验证
    public static boolean check(String password,String finalPassword) {
        if(StringUtils.hasLength(password) && StringUtils.hasLength(finalPassword) && finalPassword.length()==65) {
            //得到盐值
            String salt = finalPassword.split("\\$")[0]; //特殊字符得转义
            //重新模拟生成最终密码
            String confirmPassword = PasswordUtils.encrypt(password, salt);
            return confirmPassword.equals(finalPassword);
        }
        return false;
    }
    
}

7.Spring框架里自带的加盐算法(Spring Security)

1.引入 Spring Security 框架 

有插件在插件中搜索,没插件去Maven仓库中搜索。

【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码,习题总结,java,前端,javascript

2.排除Spring Security框架自带的登录界面

【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码,习题总结,java,前端,javascript

3.使用

它的两个方法跟我手写的加盐算法的方法的思想都比较相似 encode()对应我的encrypt()方法,matches()对应我的check()方法。

【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码,习题总结,java,前端,javascript

共60个字符组成的加密密文

【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码,习题总结,java,前端,javascript


8.sql语句分页算法

select * from articleinfo limit M offset N;  

select * from articleinfo limit M ,N;

以上两种分页是完全不同的。第一种涉及分页算法,分页常用第一种。

第一种(offset):

M : 每页显示条数

N :  由算法得出  = (当前页面页数-1)* 每页显示条数(M)

举例:要求每页显示2条数

页数 M N       算法
1    2 0            (1-1)*2
2   2 2        (2-1)*2
3 2 4 (3-1)*2

select * from articleinfo limit 2 offset 0; 表示每页显示2条数据,且当前在第一页

 举例:要求每页显示3条数

页数 M N       算法
1    3 0            (1-1)*3
2   3 3       (2-1)*3
3 3 6 (3-1)*3

第二种(逗号):

select * from articleinfo limit M ,N;

M : 表示当前从M号位置开始查找,且M号不算,是从M+1号开始的。

N : 总共查N条。 

即查找的范围就是 [M+1,M+1+N] 闭区间。


9.JS拼接代码

以返回博客列表集合为例:

success: function (result) {
    if(result!=null && result.code==200 && result.data.length>0) {
         var blogs = "";
         for (var i = 0; i < result.data.length; i++) {
             blogs += '<div class="blog">';
             blogs += '<div class="title">'+result.data[i].title+'</div>';
             blogs += '<div className="date">'+result.data[i].createtime+'</div>';
             blogs += '<div class="desc">'+result.data[i].content+'</div>';
             blogs += '<a href="blog_content.html?id='+result.data[i].id+'" class="detail">查看全文 &gt;&gt;</a>';
             blogs += '</div>';
         }
         Query('#articleList').html(blogs);
}

10.验证码

验证码插件Hutool 文档->Hutool参考文档。

11.不同的数据类型使用HashMap函数统一返回

如下是一个list列表(列表中存储对象)和一个字符串使用hashmap函数统一返回。

【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码,习题总结,java,前端,javascript文章来源地址https://www.toymoban.com/news/detail-812251.html

到了这里,关于【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringMVC中拦截器的简单使用

    步骤一:创建拦截器类 首先,我们需要创建一个拦截器类,该类需要实现 HandlerInterceptor 接口。这个接口定义了三个方法,分别在请求处理前、请求处理后和视图渲染后执行。 步骤二:创建配置类 上述配置类使用了 @Configuration 注解,表示这是一个配置类。通过 @Bean 注解将

    2024年01月17日
    浏览(41)
  • Spring Boot统一处理功能——拦截器

    ⽤户登录权限的发展从之前每个⽅法中⾃⼰验证⽤户登录权限,到现在统⼀的⽤户登录验证处理,它是⼀个逐渐完善和逐渐优化的过程。 我们先来回顾⼀下最初⽤户登录验证的实现⽅法: 从上述代码可以看出,每个⽅法中都有相同的⽤户登录验证权限,它的缺点是: 1. 每个

    2024年02月13日
    浏览(34)
  • 【Spring Boot】拦截器与统一功能处理

    博主简介:想进大厂的打工人 博主主页: @xyk: 所属专栏: JavaEE进阶   上一篇文章我们讲解了Spring AOP是一个基于面向切面编程的框架,用于将某方面具体问题集中处理,通过代理对象来进行传递,但使用原生Spring AOP实现统一的拦截是非常繁琐的。而在本节,我们将使用一种

    2024年02月14日
    浏览(39)
  • 以配置的方式开关axios拦截器功能

    前景提要: ts 简易封装 axios,统一 API axios 很多额外功能都是基于拦截器实现。有些功能想要全局使用,因此将拦截器注册在全局。比如重复请求过滤。但也有一小部分请求不希望进行过滤,比如并发上传文件。 因此希望可以在具体的请求方法上,通过配置 config 从而决定针

    2024年02月06日
    浏览(38)
  • 【Spring Boot】拦截器与统一功能处理:统一登录验证、统一异常处理与统一数据返回格式

     Spring AOP是一个基于面向切面编程的框架,用于将横切性关注点(如日志记录、事务管理)与业务逻辑分离,通过代理对象将这些关注点织入到目标对象的方法执行前后、抛出异常或返回结果时等特定位置执行,从而提高程序的可复用性、可维护性和灵活性。但使用原生Sp

    2024年02月16日
    浏览(44)
  • Sa-Token v.1.31.0 新增拦截器 SaInterceptor 功能说明,以及旧代码迁移示例

    前言 如果你的项目没有使用旧写法,可以忽略本篇文章 移步官网,本文只针对旧版本到新版本的迁移提供示例。 1、旧版本 Sa-Token 在 1.30.0 及以下版本中使用两个拦截器: SaAnnotationInterceptor :负责提供注解鉴权能力。 SaRouteInterceptor :负责提供路由拦截鉴权能力。 这次新增

    2024年02月07日
    浏览(100)
  • Spring Boot 统一功能处理(拦截器实现用户登录权限的统一校验、统一异常返回、统一数据格式返回)

    目录 1. 用户登录权限校验 1.1 最初用户登录权限效验 1.2 Spring AOP 用户统⼀登录验证 1.3 Spring 拦截器 (1)创建自定义拦截器 (2)将自定义拦截器添加到系统配置中,并设置拦截的规则 1.4 练习:登录拦截器 (1)实现 UserController 实体类 (2)返回的登录页面:login.html (3)实

    2024年02月12日
    浏览(47)
  • 数据权限拦截器,多租户拦截器

    WEB类型软件产品,在Java(SpringBoot)+MybatisPlus架构场景下,本文针对下面两个问题,提供解决方案: 多租户的产品,想在表内级别上,实现租户数据隔离(分表、分库方案不在本文讨论范围内)。 ToB、ToG类型的软件产品,需要实现数据权限鉴权。例如用户数据、部门数据、租户

    2024年02月02日
    浏览(42)
  • SpringBoot加入拦截器——登录拦截器的实现

            拦截器 Interceptor 在 Spring MVC 中的地位等同于 Servlet 规范中的过滤器 Filter,拦截的是处理器的执行,由于是全局行为,因此常用于做一些通用的功能,如请求日志打印、权限控制等。         核心原理:AOP思想 preHandle:  预先处理,在目标的controller方法执行之前,进行

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包