日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解springSecurity之java配置篇

瀏覽:21日期:2022-08-29 14:55:49

一 前言

本篇是springSecurity知識(shí)的入門(mén)第二篇,主要內(nèi)容是如何使用java配置的方式進(jìn)行配置springSeciruty,然后通過(guò)一個(gè)簡(jiǎn)單的示例自定義登陸頁(yè)面,覆蓋原有springSecurity默認(rèn)的登陸頁(yè)面;學(xué)習(xí)這篇的基礎(chǔ)是 知識(shí)追尋者之前發(fā)布 過(guò) 的《springSecurity入門(mén)篇》

二 java配置

2.1配置賬號(hào)密碼

如下所示, 使用 @EnableWebSecurity 在配置類(lèi)上開(kāi)啟security配置功能; 在配置類(lèi)中定義bean 名為 UserDetailsService, 主要是 負(fù)責(zé) 設(shè)置賬號(hào)密碼,攔截URL,校驗(yàn)成功后重定向至URL;如果要使用多用戶,使用 manager.createUser 方法即可;

/** * @Author lsc * <p> </p> */@EnableWebSecurity// 開(kāi)啟springSecuritypublic class WebSecurityConfig { /* * * @Author lsc * <p> 主要是讓SpringSecurity知道springSecurityFilterChain負(fù)責(zé)管理應(yīng)用的URL * 校驗(yàn),通過(guò)賬號(hào),密碼的方式校驗(yàn)成功后重定向至應(yīng)用; * </p> * @Param [] */ @Bean public UserDetailsService userDetailsService() throws Exception { // User.UserBuilder users = User.withDefaultPasswordEncoder(); InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(users.username('user').password('user').roles('USER').build()); manager.createUser(users.username('admin').password('admin').roles('USER','ADMIN').build()); return manager; }}

訪問(wèn) localhost:8080/login 此時(shí)輸入的密碼就是 user , user ; 或者 admin, admin;

2.2 默認(rèn)授權(quán)配置

如下所示 往配置類(lèi)中 添加 配置類(lèi),其 繼承 WebSecurityConfigurerAdapter, 重寫(xiě) configure(HttpSecurity http) 方法, 此方便的作用就是Security 的授權(quán)過(guò)程,如下示例中,任何的請(qǐng)求都需要認(rèn)證才可以訪問(wèn),并且登陸頁(yè)面還是security自帶的登陸頁(yè)面;

@Configuration public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests(authorize -> authorize // 授權(quán) .anyRequest() // 任何請(qǐng)求 .authenticated() // 認(rèn)證認(rèn)證 ) .formLogin(withDefaults()); // } }

2.3 過(guò)濾器順序

再向配置中添加如下配置,其內(nèi)容和上節(jié)內(nèi)容差不多,但是 攔截的url 是 以/api 為開(kāi)頭的URL, 并且 是 ADMIN 角色才擁有訪問(wèn)權(quán)限; 使用@Order(1), 過(guò)濾器配置會(huì)優(yōu)先走著條配置,其次才是上節(jié) 的配置;

@Configuration @Order(1) public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http .antMatcher('/api/**') .authorizeRequests(authorize -> authorize .anyRequest().hasRole('ADMIN') ) .httpBasic(withDefaults()) .formLogin(withDefaults()); } }

控制層添加代碼如下

@GetMapping('api/login') public String login(){ return 'login'; }

首先使用user用戶訪問(wèn) http://localhost:8080/api/login 賬號(hào)密碼校驗(yàn)成功后跳轉(zhuǎn)應(yīng)用請(qǐng)求url, 出現(xiàn)禁止頁(yè)面,原因是user沒(méi)有ADMIN角色權(quán)限;

詳解springSecurity之java配置篇

然后使用admin用戶登陸訪問(wèn) http://localhost:8080/api/login 賬號(hào)密碼校驗(yàn)成功后跳轉(zhuǎn)應(yīng)用請(qǐng)求url 正常放問(wèn);

登陸頁(yè)面如下

詳解springSecurity之java配置篇

登陸成功后跳轉(zhuǎn)如下

詳解springSecurity之java配置篇

三 自定義登陸頁(yè)面

3.1 實(shí)現(xiàn)自定頁(yè)面登陸

自定義登陸頁(yè)面 知識(shí)追尋者這邊需要引入引擎模板依賴 , thymeleaf; application配置如下

spring: # 引擎模板配置 thymeleaf: cache: false # 關(guān)閉緩存 mode: HTML prefix: classpath:/templates/ # 指定 thymeleaf 模板路徑 encoding: UTF-8 # 指定字符集編碼 mvc: static-path-pattern: /static/** # js ,css 等靜態(tài)文件路徑

然后在templates 下新建 login.html , 內(nèi)容如下

<!DOCTYPE html><html xmlns='http://www.w3.org/1999/xhtml' xmlns:th='https://www.thymeleaf.org'><head> <title>Please Log In</title></head><body><h1>Please Log In</h1><div th:if='${param.error}'> Invalid username and password.</div><div th:if='${param.logout}'> You have been logged out.</div><form th:action='@{/login}' method='post'> <div> <input type='text' name='username' placeholder='Username'/> </div> <div> <input type='password' name='password' placeholder='Password'/> </div> <input type='submit' value='Log in' /></form></body></html>

springSecurity授權(quán)配置內(nèi)容如下,如下所示,loginPage 配置登陸頁(yè)面,注意不要帶上.html,loginProcessingUrl 配置登陸url,注意這邊的url要與 login.html里面的action的url一致,否則會(huì)報(bào)錯(cuò);后面就是successForwardUrl 登陸成功后的轉(zhuǎn)發(fā),當(dāng)然還有登陸失敗的轉(zhuǎn)發(fā)failureForwardUrl(), 讀者按需配置即可;

@Configuration @Order(1) public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http .antMatcher('/**') .authorizeRequests(authorize -> authorize .anyRequest().hasRole('USER') ) .formLogin(form -> { form.loginPage('/login') // 配置登陸頁(yè).loginProcessingUrl('/login').successForwardUrl('/login/success')// 登陸成功后會(huì)轉(zhuǎn)發(fā)至 /login/success 請(qǐng)求.permitAll(); // 允許所有人訪問(wèn) }) .csrf().disable() .httpBasic();// http請(qǐng)求方式 ,web 瀏覽器會(huì)彈出對(duì)話框 } }

再將控制層內(nèi)容替換如下啊,登陸邏輯就是我們請(qǐng)求 /login 會(huì)被轉(zhuǎn)發(fā)至login.html, 然后action 提交至 /login, 這邊已經(jīng)到springSecurity 內(nèi)部, 登陸成功后其會(huì)轉(zhuǎn)發(fā) 至 /login/success;

@GetMapping('/login') public String login() { return 'login'; } @PostMapping('/login/success') @ResponseBody public String success() { return 'sucess'; }

啟動(dòng)項(xiàng)目,瀏覽器輸入http://localhost:8080/login 或者其它 ip + port + / path 會(huì)自動(dòng)跳轉(zhuǎn)至自定義 登陸頁(yè)面

詳解springSecurity之java配置篇

輸入成功后會(huì)跳轉(zhuǎn)的 /login/success ,返回內(nèi)容如下

詳解springSecurity之java配置篇

3.2 自定義登陸流程分析

來(lái)自官網(wǎng)的圖片如下,是form表單登陸的流程,

首先客戶端會(huì)發(fā)送未授權(quán)請(qǐng)求到服務(wù)端會(huì)被 FilterSecurityInterceptor 攔截標(biāo)明為未授權(quán)的請(qǐng)求,拋出AccessDeniedException; ExceptionTranslationFilter 會(huì)捕獲 AccessDeniedException 異常 此時(shí) AuthenticationEntryPoint 會(huì)初始化配置流程; 捕獲異常后并且重定向到登陸頁(yè)面 最后 在登陸頁(yè)面輸入賬號(hào)密碼就會(huì)進(jìn)入認(rèn)證流程;

詳解springSecurity之java配置篇

3.3 登陸認(rèn)證流程分析

官網(wǎng)登陸時(shí)的認(rèn)證流程圖片如下

賬號(hào)密碼輸入成功后,UsernamePasswordAuthenticationFilter 就會(huì)創(chuàng)建UsernamePasswordAuthenticationToken; AuthenticationManager儲(chǔ)存著用戶的信息,UsernamePasswordAuthenticationToken 會(huì)被送至這邊進(jìn)行認(rèn)證; 如果認(rèn)證失敗,SecurityContextHolder(主要是儲(chǔ)存認(rèn)證的數(shù)據(jù),principle,credentials,authorities)會(huì)被清空, RememberMeServices.loginFail 與 AuthenticationFailureHandler都會(huì)被調(diào)用; 如果登陸成功SessionAuthenticationStrategy 會(huì)被喚起重新定制下一次的登陸,認(rèn)證信息會(huì)被儲(chǔ)存至SecurityContextHolder,如果配置了remberMe, RememberMeServices.loginSuccess會(huì)被調(diào)用,ApplicationEventPublisher 會(huì)發(fā)布InteractiveAuthenticationSuccessEvent,AuthenticationSuccessHandler會(huì)被調(diào)用;

簡(jiǎn)單概括就是賬號(hào)密碼輸入后進(jìn)入認(rèn)證流程,發(fā)放token, 在manager中認(rèn)證,如果認(rèn)證成功存儲(chǔ)認(rèn)證信息,否則清空認(rèn)證信息;

詳解springSecurity之java配置篇

四 參考文檔

官方文檔

https://docs.spring.io/spring-security/site/docs/5.3.3.BUILD-SNAPSHOT/reference/html5/#servlet-authentication-form

到此這篇關(guān)于詳解springSecurity之java配置篇的文章就介紹到這了,更多相關(guān)springSecurity java配置內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩在线a电影| 久久精品99久久久| 日韩综合在线| 精品国产黄a∨片高清在线| 欧美一级二级视频| 亚洲aa在线| 人人爱人人干婷婷丁香亚洲| 日韩不卡一区二区| 久久精品99久久久| 麻豆久久一区| av资源中文在线| 91精品一区国产高清在线gif| 激情欧美国产欧美| 亚洲综合二区| 日本欧美韩国一区三区| 国产精品亚洲二区| 国产一区国产二区国产三区 | 日韩免费视频| 四虎884aa成人精品最新| 欧美日韩亚洲在线观看| 99成人在线| 日本va欧美va精品发布| 精品国产鲁一鲁****| 日韩av免费| 亚洲一区国产一区| 日韩激情综合| 色婷婷色综合| 国产一区导航| 国产精品免费99久久久| 92国产精品| 一区久久精品| 日本欧美久久久久免费播放网| 美腿丝袜亚洲三区| 播放一区二区| 亚洲久久视频| 精品一区av| 国产亚洲毛片在线| 国产精品网在线观看| 欧美日韩精品免费观看视欧美高清免费大片| 亚洲成人精选| 国产美女视频一区二区| 日韩一区二区在线免费| 欧美一区=区| 久久一区精品| 亚洲视频播放| 国产精品蜜月aⅴ在线| 婷婷激情一区| 日本高清久久| 久久视频一区| 国产人成精品一区二区三| 久久精品电影| 久久国产精品免费一区二区三区| 亚洲电影有码| 国产丝袜一区| 午夜影院欧美| 国产一区二区三区不卡视频网站 | 国产精品chinese| 黄色亚洲大片免费在线观看| 久久精品国产福利| 亚洲欧美日韩国产| 久久精品日韩欧美| 影音先锋久久精品| 成人三级高清视频在线看| 蜜桃91丨九色丨蝌蚪91桃色| 成人av三级| 亚洲免费毛片| 欧美日韩尤物久久| 国产欧美日韩精品高清二区综合区 | 免费一级欧美片在线观看网站| 亚洲精品在线观看91| 国产福利一区二区三区在线播放| 午夜欧美精品久久久久久久| 精品一区不卡| 奇米狠狠一区二区三区| 在线精品视频在线观看高清| 国产成人免费av一区二区午夜| 在线精品亚洲| 久久国产欧美| 欧美精品不卡| 亚洲精品大全| 91九色精品国产一区二区| 欧美精品99| 亚洲一区欧美| 国精品一区二区三区| 精品久久久久中文字幕小说| 日本不卡在线视频| 国产亚洲毛片| 99精品一区| 吉吉日韩欧美| 美女久久99| 久久激情五月婷婷| 亚洲人成精品久久久| 久久精品91| 欧美xxxx中国| 麻豆精品视频在线| 欧美中文高清| 亚洲久久在线| 天使萌一区二区三区免费观看| 日韩视频网站在线观看| 精品黄色一级片| 国产激情久久| 国产精品一区二区av日韩在线| 亚洲精品观看| 亚洲1区在线观看| 免费在线视频一区| 国产精品免费看| 亚洲韩日在线| 91看片一区| 91亚洲成人| 国产一区2区在线观看| 麻豆精品在线播放| 免费视频一区二区三区在线观看 | 亚洲三级在线| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品美女午夜爽爽| 国产日韩高清一区二区三区在线| 亚洲ab电影| 日本成人中文字幕在线视频| 天堂精品久久久久| 亚洲免费成人av在线| 亚洲精品一级二级三级| 亚洲狼人精品一区二区三区| 日本一区二区三区中文字幕| 日本v片在线高清不卡在线观看| 日本亚洲不卡| 国产精品日本一区二区不卡视频 | 国产伦理久久久久久妇女| 国产乱码精品| 精品美女视频| 日韩欧美三级| 国产高清久久| 另类av一区二区| 日本 国产 欧美色综合| 免费一级片91| 欧美一级网址| 老色鬼精品视频在线观看播放| 麻豆国产精品777777在线| 国产成人精品一区二区三区视频 | 国产亚洲欧美日韩精品一区二区三区 | 国产精品久久久久av蜜臀 | 国产成人精品亚洲线观看| 蜜臀国产一区| 亚洲福利精品| 老司机精品久久| 欧美日韩精品一区二区三区视频| 日本中文字幕一区二区视频| 国产日韩中文在线中文字幕| 精品国产aⅴ| 色爱av综合网| 美女91精品| 国产探花在线精品| 黄色在线网站噜噜噜| 欧美日韩激情| 亚洲男人在线| 久久97久久97精品免视看秋霞| 国产精品久久观看| jiujiure精品视频播放| 亚州欧美在线| 大香伊人久久精品一区二区| 久久久久免费av| 国产精品老牛| 国产精品免费精品自在线观看| 91看片一区| 亚洲日产av中文字幕| 久久97视频| 黄页网站一区| 国产精品一区免费在线| 国产精品久久久久久久久妇女| 国产在线欧美| 欧美亚洲一区二区三区| 蜜臀国产一区| 亚洲美女久久| 色综合狠狠操| 久久国产成人| 久久久久亚洲精品中文字幕| 91精品精品| 国产图片一区| 亚洲天堂久久| 日韩高清不卡一区二区| 成人在线丰满少妇av| 久久亚洲美女| 欧美丰满日韩| 日韩精品欧美精品| 免费高潮视频95在线观看网站| 亚洲精选av| 欧美一区久久久| 日本在线成人| 久久一区二区三区电影| 久久国产三级精品| 欧美不卡在线| 国产日韩欧美| 怡红院精品视频在线观看极品| 国产日韩亚洲| 在线综合亚洲| 最新中文字幕在线播放 | 国产精品2023| 蜜桃av一区| 日韩免费小视频| 国产精品亚洲四区在线观看 | 国产99久久久国产精品成人免费|