国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼

這篇具有很好參考價(jià)值的文章主要介紹了【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.實(shí)現(xiàn)攔截器 Interceptor (以登錄攔截器為例)

1.1 寫一個(gè)登錄攔截器普通類

  1. 實(shí)現(xiàn)HandlerInterceptor接口
  2. 重寫preHandle方法
//檢驗(yàn)登錄狀態(tài)攔截器
//實(shí)現(xiàn)接口HandlerInterceptor  重寫方法preHandle
public class LoginInterceptor implements HandlerInterceptor {
    /*
    * 該方法返回為true,用戶已登錄
    * 該方法返回為false,用戶未登錄
    * */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //獲取會(huì)話
        HttpSession session = request.getSession(false);
        if(session != null && session.getAttribute(AppVariable.USER_SESSION_KEY) != null) {
            //用戶已經(jīng)登錄
            return true;
        }
        //未登錄,則跳轉(zhuǎn)到登錄頁(yè)面
        response.sendRedirect("/login.html");
        return false;
    }
}

2.2 設(shè)置攔截規(guī)則

  1. 加@Configuration注解
  2. 實(shí)現(xiàn)WebMvcConfigurer接口
  3. 重寫addInterceptors方法
//設(shè)置攔截規(guī)則
// 1. 加注解@Configuration
// 2. 實(shí)現(xiàn)接口WebMvcConfigurer 重寫方法addInterceptors
@Configuration
public class AppConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()) //參數(shù)就是第一步的普通類
                .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提供的深克隆方法)

【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼,習(xí)題總結(jié),java,前端,javascript


3.時(shí)間日期格式化?

  • 1. 全局日期格式化

這種方式的缺點(diǎn)是只對(duì)時(shí)間數(shù)據(jù)類型為date的生效,對(duì)于java8的LocalDate,LocalDateTime是不生效的。

【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼,習(xí)題總結(jié),java,前端,javascript

  • 2.局部日期格式化

全局和局部都設(shè)置時(shí),默認(rèn)是優(yōu)先局部。? 由于時(shí)間格式類型的原因,最好用如下局部這種注解,全局太局限。

【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼,習(xí)題總結(jié),java,前端,javascript
?


4.JS實(shí)現(xiàn)獲取當(dāng)前ur所有參數(shù)的公共方法

//獲取當(dāng)前頁(yè)面url中的參數(shù)的公共方法
            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碼加密。

【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼,習(xí)題總結(jié),java,前端,javascript

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

6.手寫加鹽算法

1.加密

  1. 該方法傳入?yún)?shù)為用戶輸入的密碼。
  2. 先用java自帶的UUID生成一個(gè)隨機(jī)數(shù),即是得到鹽值。
  3. 然后將將鹽值和用戶密碼拼接,并用MD5加密,得到MD5加密密文。
  4. 最后拼接鹽值和被MD5加密的密文,中間用$符連接。即得到最終要往數(shù)據(jù)庫(kù)存的密碼。該密碼由65個(gè)字符組成。共65個(gè)字符。
  5. 返回值為該密文。

2.模擬加密

  1. 該方法傳入?yún)?shù)為用戶輸入的密碼和鹽值。
  2. 先將將鹽值和用戶密碼拼接,并用MD5加密,得到MD5加密密文。
  3. 最后拼接鹽值和被MD5加密的密文,中間用$符連接。即得到密文。該密碼由65個(gè)字符組成。共65個(gè)字符。
  4. 返回值也為密文。

3.判斷

  1. 該方法傳入?yún)?shù)為用戶輸入的密碼和從數(shù)據(jù)庫(kù)中得到的密碼。
  2. 首先獲取鹽值,將從數(shù)據(jù)庫(kù)中得到的密碼進(jìn)行分割得到鹽值。
  3. 調(diào)用模擬加密方法。生成一個(gè)模擬的密文。
  4. 比較從數(shù)據(jù)庫(kù)中得到的密碼和模擬生成的密文是否相同。
  5. 返回boolean類型。

3.代碼

// 加鹽算法
public class PasswordUtils {
    // 1. 加鹽并生成密碼
    public static String encrypt(String password) {
        // 1.產(chǎn)生鹽值 128位
        String salt = UUID.randomUUID().toString().replace("-","");
        // 2.拼接鹽值和密碼,再對(duì)這個(gè)整體使用md5加密,得到一個(gè)128位的密文
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 3.最終密碼格式 【128位的鹽值+$+128位的密文】 并保存到數(shù)據(jù)庫(kù) 共65個(gè)字符
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    // 2.解密算法
    // 解密還是根據(jù)用戶的密碼再次模擬生成加鹽后的密文,再對(duì)比數(shù)據(jù)庫(kù)中的密文,相同就說(shuō)明正確
    // 和上面寫法一樣,只是鹽值固定了
    public static String encrypt(String password,String salt) {
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    // 3.密碼驗(yàn)證
    public static boolean check(String password,String finalPassword) {
        if(StringUtils.hasLength(password) && StringUtils.hasLength(finalPassword) && finalPassword.length()==65) {
            //得到鹽值
            String salt = finalPassword.split("\\$")[0]; //特殊字符得轉(zhuǎn)義
            //重新模擬生成最終密碼
            String confirmPassword = PasswordUtils.encrypt(password, salt);
            return confirmPassword.equals(finalPassword);
        }
        return false;
    }
    
}

7.Spring框架里自帶的加鹽算法(Spring Security)

1.引入 Spring Security 框架?

有插件在插件中搜索,沒(méi)插件去Maven倉(cāng)庫(kù)中搜索。

【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼,習(xí)題總結(jié),java,前端,javascript

2.排除Spring Security框架自帶的登錄界面

【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼,習(xí)題總結(jié),java,前端,javascript

3.使用

它的兩個(gè)方法跟我手寫的加鹽算法的方法的思想都比較相似 encode()對(duì)應(yīng)我的encrypt()方法,matches()對(duì)應(yīng)我的check()方法。

【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼,習(xí)題總結(jié),java,前端,javascript

共60個(gè)字符組成的加密密文

【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼,習(xí)題總結(jié),java,前端,javascript


8.sql語(yǔ)句分頁(yè)算法

select * from articleinfo limit M offset N;??

select * from articleinfo limit M ,N;

以上兩種分頁(yè)是完全不同的。第一種涉及分頁(yè)算法,分頁(yè)常用第一種。

第一種(offset):

M : 每頁(yè)顯示條數(shù)

N :? 由算法得出? = (當(dāng)前頁(yè)面頁(yè)數(shù)-1)* 每頁(yè)顯示條數(shù)(M)

舉例:要求每頁(yè)顯示2條數(shù)

頁(yè)數(shù) 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; 表示每頁(yè)顯示2條數(shù)據(jù),且當(dāng)前在第一頁(yè)

?舉例:要求每頁(yè)顯示3條數(shù)

頁(yè)數(shù) M N? ? ?? 算法
1? ? 3 0? ? ? ? ? ? (1-1)*3
2?? 3 3? ? ?? (2-1)*3
3 3 6 (3-1)*3

第二種(逗號(hào)):

select * from articleinfo limit M ,N;

M : 表示當(dāng)前從M號(hào)位置開(kāi)始查找,且M號(hào)不算,是從M+1號(hào)開(kāi)始的。

N : 總共查N條。?

即查找的范圍就是 [M+1,M+1+N] 閉區(qū)間。


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.驗(yàn)證碼

驗(yàn)證碼插件Hutool?文檔->Hutool參考文檔。

11.不同的數(shù)據(jù)類型使用HashMap函數(shù)統(tǒng)一返回

如下是一個(gè)list列表(列表中存儲(chǔ)對(duì)象)和一個(gè)字符串使用hashmap函數(shù)統(tǒng)一返回。

【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼,習(xí)題總結(jié),java,前端,javascript文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-812251.html

到了這里,關(guān)于【常用的簡(jiǎn)單功能及算法】攔截器 加鹽算法 深克隆 時(shí)間日期格式化 加鹽算法 sql分頁(yè)算法 驗(yàn)證碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringMVC中攔截器的簡(jiǎn)單使用

    步驟一:創(chuàng)建攔截器類 首先,我們需要?jiǎng)?chuàng)建一個(gè)攔截器類,該類需要實(shí)現(xiàn) HandlerInterceptor 接口。這個(gè)接口定義了三個(gè)方法,分別在請(qǐng)求處理前、請(qǐng)求處理后和視圖渲染后執(zhí)行。 步驟二:創(chuàng)建配置類 上述配置類使用了 @Configuration 注解,表示這是一個(gè)配置類。通過(guò) @Bean 注解將

    2024年01月17日
    瀏覽(21)
  • Spring Boot統(tǒng)一處理功能——攔截器

    Spring Boot統(tǒng)一處理功能——攔截器

    ?戶登錄權(quán)限的發(fā)展從之前每個(gè)?法中??驗(yàn)證?戶登錄權(quán)限,到現(xiàn)在統(tǒng)?的?戶登錄驗(yàn)證處理,它是?個(gè)逐漸完善和逐漸優(yōu)化的過(guò)程。 我們先來(lái)回顧?下最初?戶登錄驗(yàn)證的實(shí)現(xiàn)?法: 從上述代碼可以看出,每個(gè)?法中都有相同的?戶登錄驗(yàn)證權(quán)限,它的缺點(diǎn)是: 1. 每個(gè)

    2024年02月13日
    瀏覽(23)
  • 以配置的方式開(kāi)關(guān)axios攔截器功能

    以配置的方式開(kāi)關(guān)axios攔截器功能

    前景提要: ts 簡(jiǎn)易封裝 axios,統(tǒng)一 API axios 很多額外功能都是基于攔截器實(shí)現(xiàn)。有些功能想要全局使用,因此將攔截器注冊(cè)在全局。比如重復(fù)請(qǐng)求過(guò)濾。但也有一小部分請(qǐng)求不希望進(jìn)行過(guò)濾,比如并發(fā)上傳文件。 因此希望可以在具體的請(qǐng)求方法上,通過(guò)配置 config 從而決定針

    2024年02月06日
    瀏覽(24)
  • 【Spring Boot】攔截器與統(tǒng)一功能處理

    【Spring Boot】攔截器與統(tǒng)一功能處理

    博主簡(jiǎn)介:想進(jìn)大廠的打工人 博主主頁(yè): @xyk: 所屬專欄:?JavaEE進(jìn)階 ? 上一篇文章我們講解了Spring AOP是一個(gè)基于面向切面編程的框架,用于將某方面具體問(wèn)題集中處理,通過(guò)代理對(duì)象來(lái)進(jìn)行傳遞,但使用原生Spring AOP實(shí)現(xiàn)統(tǒng)一的攔截是非常繁瑣的。而在本節(jié),我們將使用一種

    2024年02月14日
    瀏覽(24)
  • Spring boot3簡(jiǎn)單實(shí)現(xiàn)websocket(攔截器,跨域,服務(wù)端發(fā)送)
  • 【Spring Boot】攔截器與統(tǒng)一功能處理:統(tǒng)一登錄驗(yàn)證、統(tǒng)一異常處理與統(tǒng)一數(shù)據(jù)返回格式

    【Spring Boot】攔截器與統(tǒng)一功能處理:統(tǒng)一登錄驗(yàn)證、統(tǒng)一異常處理與統(tǒng)一數(shù)據(jù)返回格式

    ?Spring AOP是一個(gè)基于面向切面編程的框架,用于將橫切性關(guān)注點(diǎn)(如日志記錄、事務(wù)管理)與業(yè)務(wù)邏輯分離,通過(guò)代理對(duì)象將這些關(guān)注點(diǎn)織入到目標(biāo)對(duì)象的方法執(zhí)行前后、拋出異?;蚍祷亟Y(jié)果時(shí)等特定位置執(zhí)行,從而提高程序的可復(fù)用性、可維護(hù)性和靈活性。但使用原生Sp

    2024年02月16日
    瀏覽(25)
  • Spring Boot 統(tǒng)一功能處理(攔截器實(shí)現(xiàn)用戶登錄權(quán)限的統(tǒng)一校驗(yàn)、統(tǒng)一異常返回、統(tǒng)一數(shù)據(jù)格式返回)

    Spring Boot 統(tǒng)一功能處理(攔截器實(shí)現(xiàn)用戶登錄權(quán)限的統(tǒng)一校驗(yàn)、統(tǒng)一異常返回、統(tǒng)一數(shù)據(jù)格式返回)

    目錄 1. 用戶登錄權(quán)限校驗(yàn) 1.1 最初用戶登錄權(quán)限效驗(yàn) 1.2 Spring AOP 用戶統(tǒng)?登錄驗(yàn)證 1.3 Spring 攔截器 (1)創(chuàng)建自定義攔截器 (2)將自定義攔截器添加到系統(tǒng)配置中,并設(shè)置攔截的規(guī)則 1.4 練習(xí):登錄攔截器 (1)實(shí)現(xiàn) UserController 實(shí)體類 (2)返回的登錄頁(yè)面:login.html (3)實(shí)

    2024年02月12日
    瀏覽(59)
  • Sa-Token v.1.31.0 新增攔截器 SaInterceptor 功能說(shuō)明,以及舊代碼遷移示例

    前言 如果你的項(xiàng)目沒(méi)有使用舊寫法,可以忽略本篇文章 移步官網(wǎng),本文只針對(duì)舊版本到新版本的遷移提供示例。 1、舊版本 Sa-Token 在 1.30.0 及以下版本中使用兩個(gè)攔截器: SaAnnotationInterceptor :負(fù)責(zé)提供注解鑒權(quán)能力。 SaRouteInterceptor :負(fù)責(zé)提供路由攔截鑒權(quán)能力。 這次新增

    2024年02月07日
    瀏覽(130)
  • 數(shù)據(jù)權(quán)限攔截器,多租戶攔截器

    WEB類型軟件產(chǎn)品,在Java(SpringBoot)+MybatisPlus架構(gòu)場(chǎng)景下,本文針對(duì)下面兩個(gè)問(wèn)題,提供解決方案: 多租戶的產(chǎn)品,想在表內(nèi)級(jí)別上,實(shí)現(xiàn)租戶數(shù)據(jù)隔離(分表、分庫(kù)方案不在本文討論范圍內(nèi))。 ToB、ToG類型的軟件產(chǎn)品,需要實(shí)現(xiàn)數(shù)據(jù)權(quán)限鑒權(quán)。例如用戶數(shù)據(jù)、部門數(shù)據(jù)、租戶

    2024年02月02日
    瀏覽(27)
  • SpringBoot加入攔截器——登錄攔截器的實(shí)現(xiàn)

    SpringBoot加入攔截器——登錄攔截器的實(shí)現(xiàn)

    ? ? ? ? 攔截器 Interceptor 在 Spring MVC 中的地位等同于 Servlet 規(guī)范中的過(guò)濾器 Filter,攔截的是處理器的執(zhí)行,由于是全局行為,因此常用于做一些通用的功能,如請(qǐng)求日志打印、權(quán)限控制等。 ? ? ? ? 核心原理:AOP思想 preHandle:? 預(yù)先處理,在目標(biāo)的controller方法執(zhí)行之前,進(jìn)行

    2024年02月15日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包