欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot整合security和vue的實(shí)踐

 更新時(shí)間:2021年09月21日 11:06:02   作者:SingleOneMan  
本文主要介紹了springboot整合security和vue的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

環(huán)境

springboot1.5.9

完整代碼,內(nèi)有sql,先建庫(kù),在運(yùn)行sql建表,sql中已插入測(cè)試的數(shù)據(jù)。

https://github.com/2010yhh/springBoot-demos/tree/master/springboot-security

在這里插入圖片描述

訪問首頁(yè):http://localhost:8080

1.security參考資料

Spring Security參考文檔:https://docs.spring.io/spring-security/site/docs/4.1.0.RELEASE/reference/htmlsingle/#what-is-acegi-security

spring-security源碼:https://github.com/spring-projects/spring-security/

主要功能:認(rèn)證和授權(quán)

Configurer Filter 功能說明

CorsConfigurer CorsFilter 提供跨域訪問配置支持的Filter

SessionManagementConfigurer SessionManagementFilter 會(huì)話管理Filter

RememberMeConfigurer RememberMeAuthenticationFilter 記住用戶名及密碼功能支持
ExpressionUrlAuthorizationConfigurer 

CsrfConfigurer CsrfFilter 跨站請(qǐng)求偽造保護(hù)Filter;

LogoutConfigurer LogoutFilter 退出登錄請(qǐng)求處理Filter

FormLoginConfigurer UsernamePasswordAuthenticationFilter 表單登錄請(qǐng)求處理Filter

OAuth2LoginConfigurer OAuth2AuthorizationRequestRedirectFilter OAuth2請(qǐng)求權(quán)限控制處理Filter,為其它網(wǎng)站提供本網(wǎng)站Oauth2方式登錄,即其它網(wǎng)站通過本網(wǎng)站的賬戶密碼進(jìn)行登錄授權(quán)

HttpBasicConfigurer BasicAuthenticationFilter Security基礎(chǔ)登錄授權(quán)Filter,將其結(jié)果保存在SecurityContextHolder中

認(rèn)證流程原理:

參考:https://www.processon.com/view/link/5ac1e565e4b00dc8a026ab46

2.springboot整合security要點(diǎn)

主要是class WebSecurityConfig extends WebSecurityConfigurerAdapter

SecurityConfig配置信息,參考代碼中的WebSecurityConfig類

2.1獲取登錄用戶信息

 UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext()
                .getAuthentication()
                .getPrincipal();

2.2自定義登入登出url

1)SecurityConfig配置中配置:

  .and()
                .formLogin()
                //指定url,可由相應(yīng)的controller處理跳轉(zhuǎn)到登錄頁(yè)如login_page.html
                .loginPage("/mylogin")//自定義登錄url
                //指定自定義form表單請(qǐng)求的路徑
                .loginProcessingUrl("/myloginForm").usernameParameter("userName").passwordParameter("passWord")
                //.defaultSuccessUrl("/success")
                .successForwardUrl("/success")//設(shè)置了登入登出的Handler,優(yōu)先響應(yīng)Handler
                .failureUrl("/fail")//設(shè)置了登入登出的Handler,優(yōu)先響應(yīng)Handler
 .and()
                .logout()
                .logoutUrl("/mylogout")//自定義退出url
                .logoutSuccessUrl("/mylogin")
                .logoutSuccessHandler(myLogoutSuccessHandle)//設(shè)置了登入登出的Handler,優(yōu)先響應(yīng)Handler
                .invalidateHttpSession(true)
                .permitAll()

2)前端請(qǐng)求中改寫請(qǐng)求的url

如vue請(qǐng)求:

export const login = data => {
  return http.post(`/myloginForm?userName=${data.userName}&passWord=${data.passWord}&rememberMe=${data.rememberMe}&imageCode=${data.imageCode}`)
}
export const logout = data => {
  return http.post(`/mylogout`)
}

如一般html表單請(qǐng)求:

<!--要與.loginProcessingUrl("/myloginForm")相對(duì)應(yīng)-->
<form name="f" action="/myloginForm" method="post">
    <br/>
    用戶名:
    <input type="text" name="userName" placeholder="name"><br/>
    密碼:
    <input type="password" name="passWord" placeholder="password"><br/>
    <input type="text" name="imageCode">
    <img src="/createImageCode"><br/>
    <input type="checkbox" name="rememberMe"/>下次自動(dòng)登錄<br/>
    <input name="submit" type="submit" value="提交">
</form>
<form action="/mylogout" method="post">
    <input type="submit" class="btn btn-primary" value="注銷"/><!-- 5 -->
</form>

2.3自定義Handler返回json

1)重寫AuthenticationSuccessHandler、AuthenticationFailureHandler、LogoutSuccessHandler、AccessDeniedHandler、AuthenticationEntryPoint 這5個(gè)類,分別是登錄成功、登錄失敗、退出成功、權(quán)限不足、尚未登錄,在這幾個(gè)重寫類中自定義返回json格式

2)SecurityConfig配置中配置;

//自定義認(rèn)證成功或者失敗的返回json
                .successHandler(myAuthenticationSuccessHandler)
                .failureHandler(myAuthenticationFailureHandler)
                
.logoutSuccessHandler(myLogoutSuccessHandle)//設(shè)置了登入登出的Handler,優(yōu)先響應(yīng)Handler
               
  http.exceptionHandling().authenticationEntryPoint(myAuthenticationEntryPoint);//未登錄
        http.exceptionHandling().accessDeniedHandler(myAccessDeniedHandler); // 無權(quán)訪問

2.4記住我功能

關(guān)掉瀏覽器,重新打開登錄url,無需登錄直接跳轉(zhuǎn)到首頁(yè)或其他頁(yè)面

1)SecurityConfig配置中配置

.and()
                .rememberMe()// 記住我
                .rememberMeParameter("rememberMe")
                .tokenRepository(persistentTokenRepository())
                .userDetailsService(myUserDetailsService).tokenValiditySeconds(60 * 60 * 24);

2)SecurityConfig配置中配置寫token入數(shù)據(jù)庫(kù)的bean

/**
     * springSecurity會(huì)根據(jù)情況自動(dòng)將token插入persistent_logins
     *
     * @return
     */
    @Bean
    public PersistentTokenRepository persistentTokenRepository() {
        JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();
        tokenRepository.setDataSource(dataSource);
        return tokenRepository;
    }

2.5驗(yàn)證碼功能

1)自定義驗(yàn)證碼過濾器,在其中驗(yàn)證輸入的驗(yàn)證碼和保存在session中的驗(yàn)證碼是否一致

2)SecurityConfig配置中配置

//將我們自定義的驗(yàn)證碼過濾器,配置
//UsernamePasswordAuthenticationFilter之前http.addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class)

2.6限制登錄次數(shù)

1)自定義登錄成功、登錄失敗的事件監(jiān)聽器

public class AuthenticationSuccessEventListener implements ApplicationListener<AuthenticationSuccessEvent>
{}
public class AuthenticationFailureListener implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> {}

2)可以利用數(shù)據(jù)庫(kù)或者redis或者換成來存儲(chǔ)登錄失敗次數(shù)進(jìn)行判斷鎖定賬號(hào)

3)實(shí)際項(xiàng)目管理員角色應(yīng)該有解鎖賬號(hào)的功能

2.7密碼加密

1)新建用戶時(shí),存儲(chǔ)密碼為加密后的,本文使用BCryptPasswordEncoder

2)執(zhí)行登錄的過程中:security內(nèi)部會(huì)對(duì)輸入的密碼加密和查詢得到的用戶的密碼進(jìn)行校驗(yàn)

2.8后臺(tái)提供接口,返回前端json,整合vue做前端登入登出

這也是前后端分離的模式。

前端可以先獲取當(dāng)前登錄用戶的所有角色及所有權(quán)限(權(quán)限可以細(xì)化到菜單、按鈕和接口):進(jìn)而決定前端顯示效果

注意前端請(qǐng)求的url寫法:

export const login = data => {
  return http.post(`/myloginForm?userName=${data.userName}&passWord=${data.passWord}&rememberMe=${data.rememberMe}&imageCode=${data.imageCode}`)
}
export const logout = data => {
  return http.post(`/mylogout`)
}

3.測(cè)試

三個(gè)用戶:admin manager user2進(jìn)行測(cè)試,本代碼中權(quán)限沒有用,只用到了角色這一級(jí)別。測(cè)試記住我功能時(shí),要清除cookie,免得影響測(cè)試。

用戶 角色 權(quán)限
admin admin manager user add delete query queryall update
manager manager user query queryall
user2 user query

對(duì)http://localhost:8080/user/list http://localhost:8080/user/list2 http://localhost:8080/user/list3(無需登錄都可以訪問) 三個(gè)url設(shè)置不同的角色

.antMatchers( "/user/list").hasAuthority("admin")
                .antMatchers( "/user/list2").hasRole("manager")

輸入:http://localhost:8080 重定向到登錄頁(yè):http://localhost:8080/#/login

2)輸入admin manager user2 的正確用戶名和密碼后,登錄成功返回的頁(yè)面顯示不同效果;三個(gè)用戶登錄成功后,直接訪問url,會(huì)根據(jù)用戶的角色不同進(jìn)行攔截,點(diǎn)擊退出后,重新回到http://localhost:8080/#/login

user2:

在這里插入圖片描述

直接訪問url:http://localhost:8080/user/list

在這里插入圖片描述

manager:

在這里插入圖片描述

直接訪問url:http://localhost:8080/user/list

在這里插入圖片描述

admin:

在這里插入圖片描述

直接訪問url:http://localhost:8080/user/list

在這里插入圖片描述

直接訪問注銷url:

在這里插入圖片描述

4)測(cè)試記住我
用admin用戶測(cè)試
這里關(guān)閉瀏覽器或者重啟進(jìn)程后,直接訪問需要角色的資源如:http://localhost:8080/#/home或者h(yuǎn)ttp://localhost:8080/user/list

可以直接訪問無需登錄。

在這里插入圖片描述

但是訪問首頁(yè)http://localhost:8080 或者h(yuǎn)ttp://localhost:8080/#/login卻不能跳轉(zhuǎn)到http://localhost:8080/#/home

5)測(cè)試驗(yàn)證碼

驗(yàn)證碼過期或者輸錯(cuò)或者刷新頁(yè)面,會(huì)重新生成驗(yàn)證碼。

在這里插入圖片描述

6)測(cè)試限制登錄次數(shù)

在輸入正確驗(yàn)證碼的情況下,輸錯(cuò)驗(yàn)證碼會(huì)直接拋出驗(yàn)證碼的異常,連續(xù)輸錯(cuò)3次(可以設(shè)置)用戶名或者密碼,賬號(hào)會(huì)鎖定,拋出賬號(hào)鎖定異常。

在這里插入圖片描述

在這里插入圖片描述

到此這篇關(guān)于springboot整合security和vue的實(shí)踐的文章就介紹到這了,更多相關(guān)springboot整合security和vue內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多線程使用阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型詳解

    Java多線程使用阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型詳解

    這篇文章主要介紹了Java多線程使用阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型詳解,主要講解阻塞隊(duì)列的特性、實(shí)際開發(fā)中常用的到的生產(chǎn)者消費(fèi)者模型,以及生產(chǎn)者消費(fèi)者模型解耦合、削峰填谷的好處,需要的朋友可以參考下
    2023-07-07
  • 異常解決SpringBoot項(xiàng)目啟動(dòng)卡住,無任何異常信息問題

    異常解決SpringBoot項(xiàng)目啟動(dòng)卡住,無任何異常信息問題

    這篇文章主要介紹了異常解決SpringBoot項(xiàng)目啟動(dòng)卡住,無任何異常信息問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • SpringBoot攔截器的配置使用介紹

    SpringBoot攔截器的配置使用介紹

    攔截器可以用來實(shí)現(xiàn)未滿足某些條件,不容許訪問某些資源。SpringBoot 支持?jǐn)r截器,本文主要介紹攔截器的使用與原理
    2022-10-10
  • 詳解springboot采用多數(shù)據(jù)源對(duì)JdbcTemplate配置的方法

    詳解springboot采用多數(shù)據(jù)源對(duì)JdbcTemplate配置的方法

    在本篇文章中我們給大家詳細(xì)分享了springboot采用多數(shù)據(jù)源對(duì)JdbcTemplate配置的方法,有需要的朋友們可以學(xué)習(xí)參考下。
    2018-10-10
  • java.lang.Instrument 代理Agent使用詳細(xì)介紹

    java.lang.Instrument 代理Agent使用詳細(xì)介紹

    這篇文章主要介紹了java.lang.Instrument 代理Agent使用詳細(xì)介紹的相關(guān)資料,附有實(shí)例代碼,幫助大家學(xué)習(xí)參考,需要的朋友可以參考下
    2016-11-11
  • springBoot項(xiàng)目中的static和templates文件夾的使用

    springBoot項(xiàng)目中的static和templates文件夾的使用

    本文主要介紹了springBoot項(xiàng)目中的static和templates文件夾的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Java并發(fā)編程之CountDownLatch解讀

    Java并發(fā)編程之CountDownLatch解讀

    這篇文章主要介紹了Java并發(fā)編程之CountDownLatch解讀,是通過一個(gè)計(jì)數(shù)器來實(shí)現(xiàn)的,計(jì)數(shù)器的初始值是線程的數(shù)量,countDownLatch這個(gè)類使一個(gè)線程等待其他線程各自執(zhí)行完畢后再執(zhí)行,需要的朋友可以參考下
    2023-12-12
  • 關(guān)于easyExcel中讀取Excel表頭的實(shí)例說明

    關(guān)于easyExcel中讀取Excel表頭的實(shí)例說明

    EasyExcel是阿里巴巴開源的一個(gè)excel處理框架,以使用簡(jiǎn)單、節(jié)省內(nèi)存著稱,下面這篇文章主要給大家介紹了關(guān)于easyExcel中讀取Excel表頭的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • SWT(JFace)體驗(yàn)之FillLayout布局

    SWT(JFace)體驗(yàn)之FillLayout布局

    FillLayout是非常簡(jiǎn)單的一種布局方式,它會(huì)以同樣大小對(duì)父組件中的子組件進(jìn)行布局,這些子組件將以一行或一列的形式排列。
    2009-06-06
  • URL @PathVariable 變量的匹配原理分析

    URL @PathVariable 變量的匹配原理分析

    這篇文章主要介紹了URL @PathVariable 變量的匹配原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評(píng)論