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

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

Spring Boot構(gòu)建系統(tǒng)安全層的步驟

瀏覽:30日期:2023-07-16 17:19:43
01 | Spring Security 架構(gòu)及核心類Spring Security 中的過(guò)濾器鏈

Spring Security 中采用的是管道-過(guò)濾器(Pipe-Filter)架構(gòu)模式,這些過(guò)濾器鏈,構(gòu)成了 Spring Security 的核心。如下圖所示:

Spring Boot構(gòu)建系統(tǒng)安全層的步驟

項(xiàng)目一旦啟動(dòng),過(guò)濾器鏈將會(huì)實(shí)現(xiàn)自動(dòng)配置,如下圖所示:

Spring Boot構(gòu)建系統(tǒng)安全層的步驟

UsernamePasswordAuthenticationFilter 用來(lái)檢查輸入的用戶名和密碼,代碼如下:

public class UsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter { public Authentication attemptAuthentication(HttpServletRequest request,HttpServletResponse response) throws AuthenticationException {if (postOnly && !request.getMethod().equals('POST')) { throw new AuthenticationServiceException('Authentication method not supported: ' + request.getMethod());} String username = obtainUsername(request);String password = obtainPassword(request); if (username == null) { username = '';} if (password == null) { password = '';} username = username.trim(); UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);// Allow subclasses to set the 'details' propertysetDetails(request, authRequest);return this.getAuthenticationManager().authenticate(authRequest); } …}

BasicAuthenticationFilter 用來(lái)認(rèn)證用戶的身份。

FilterSecurityInterceptor 用來(lái)判定該請(qǐng)求是否能夠訪問(wèn)目標(biāo) HTTP 端點(diǎn)。

Spring Security 中的核心類

Spring Boot構(gòu)建系統(tǒng)安全層的步驟

SecurityContextHolder 存儲(chǔ)了應(yīng)用的安全上下文對(duì)象 SecurityContext,包含系統(tǒng)請(qǐng)求中最近使用的認(rèn)證信息。

一個(gè) HTTP 請(qǐng)求到達(dá)系統(tǒng)后,將通過(guò)一系列的 Filter 完成用戶認(rèn)證,然后具體的工作交由 AuthenticationManager 完成,AuthenticationManager 成功驗(yàn)證后會(huì)返回填充好的 Authentication 實(shí)例。

AuthenticationManager 是一個(gè)接口,其實(shí)現(xiàn)類 ProviderManager 會(huì)進(jìn)一步依賴 AuthenticationProvider 接口完成具體的認(rèn)證工作。

在 Spring Security 中存在一大批 AuthenticationProvider 接口的實(shí)現(xiàn)類,分別完成各種認(rèn)證操作。在執(zhí)行具體的認(rèn)證工作時(shí),Spring Security 勢(shì)必會(huì)使用用戶詳細(xì)信息,UserDetailsService 服務(wù)就是用來(lái)對(duì)用戶詳細(xì)信息實(shí)現(xiàn)管理。

02 | 基于 Spring Security 構(gòu)建用戶認(rèn)證體系

在 Spring Boot 中整合 Spring Security 框架首先需要引入依賴:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>

只要我們?cè)诖a工程中添加了上述依賴,包含在該工程中的所有 HTTP 端點(diǎn)都將被保護(hù)起來(lái)。

在引入 spring-boot-starter-security 依賴之后,Spring Security 會(huì)默認(rèn)創(chuàng)建一個(gè)用戶名為“user”的賬號(hào)。當(dāng)我們?cè)L問(wèn) AccountController 的 “accounts/{accountId}” 端點(diǎn)時(shí),彈出如下界面:

Spring Boot構(gòu)建系統(tǒng)安全層的步驟

同時(shí),控制臺(tái)日志打印如下:

Using generated security password: 17bbf7c4-456a-48f5-a12e-a680066c8f80

因此,訪問(wèn)該接口需要設(shè)置如下信息:

Spring Boot構(gòu)建系統(tǒng)安全層的步驟

每次啟動(dòng)應(yīng)用時(shí),通過(guò) Spring Security 自動(dòng)生成的密碼都會(huì)有所變化。如果我們想設(shè)置登錄賬號(hào)和密碼,可以在 application.yml 中配置如下:

spring: security: user: name: springcss password: springcss_password配置 Spring Security

初始化用戶信息所依賴的配置類是 WebSecurityConfigurer 接口,在日常開(kāi)發(fā)中,我們往往是使用 WebSecurityConfigurerAdapter 類并覆寫(xiě)其中的 configure(AuthenticationManagerBuilder auth) 的方法完成配置工作。

使用 AuthenticationManagerBuilder 類創(chuàng)建一個(gè) AuthenticationManager 就能夠輕松實(shí)現(xiàn)基于內(nèi)存、LADP 和 JDBC 的驗(yàn)證。初始化所使用的用戶信息只需要指定用戶名(Username)、密碼(Password)和角色(Role)這三項(xiàng)數(shù)據(jù)即可。

使用基于內(nèi)存的用戶信息存儲(chǔ)方案

@Overrideprotected void configure(AuthenticationManagerBuilder builder) throws Exception { builder.inMemoryAuthentication().withUser('springcss_user').password('password1')// 或者使用.authorities('ROLE_USER').roles('USER').and().withUser('springcss_admin').password('password2').roles('USER', 'ADMIN');}

使用基于數(shù)據(jù)庫(kù)的用戶信息存儲(chǔ)方案

表結(jié)構(gòu)如下:

create table users( username varchar_ignorecase(50) not null primary key, password varchar_ignorecase(500) not null, enabled boolean not null); create table authorities ( username varchar_ignorecase(50) not null, authority varchar_ignorecase(50) not null, constraint fk_authorities_users foreign key(username) references users(username)); create unique index ix_auth_username on authorities (username,authority);

Spring Security 的配置代碼如下:

@AutowiredDataSource dataSource; @Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.jdbcAuthentication().dataSource(dataSource).usersByUsernameQuery('select username, password, enabled from Users where username=?').authoritiesByUsernameQuery('select username, authority from UserAuthorities where username=?').passwordEncoder(new BCryptPasswordEncoder());}實(shí)現(xiàn)定制化用戶認(rèn)證方案

擴(kuò)展 UserDetails

public class SpringCssUser implements UserDetails { private static final long serialVersionUID = 1L; private Long id; private final String username; private final String password; private final String phoneNumber; // 省略getter/setter // 省略重寫(xiě)方法}

擴(kuò)展 UserDetailsService

@Servicepublic class SpringCssUserDetailsService implements UserDetailsService { @Autowired private SpringCssUserRepository repository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {SpringCssUser user = repository.findByUsername(username);if (user != null) { return user;}throw new UsernameNotFoundException('SpringCSS User ’' + username + '’ not found'); }}

整合定制化配置

@Configurationpublic class SpringCssSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired SpringCssUserDetailsService springCssUserDetailsService; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(springCssUserDetailsService); }}03 | 基于 Spring Security 實(shí)現(xiàn)安全訪問(wèn)

在日常開(kāi)發(fā)過(guò)程中,我們需要對(duì) Web 應(yīng)用中的不同 HTTP 端點(diǎn)進(jìn)行不同粒度的權(quán)限控制。

對(duì) HTTP 端點(diǎn)進(jìn)行訪問(wèn)授權(quán)管理

使用配置方法

配置方法也是位于 WebSecurityConfigurerAdapter 類中,但使用的是 configure(HttpSecurity http) 方法,如下代碼所示:

protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests()// 所有請(qǐng)求都需要認(rèn)證.anyRequest()// 允許認(rèn)證用戶訪問(wèn).authenticated().and()// 需要使用表單進(jìn)行登錄.formLogin().and()// 使用 HTTP Basic Authentication 方法完成認(rèn)證.httpBasic();}

Spring Security 還提供了一個(gè) access() 方法,允許開(kāi)發(fā)人員傳入一個(gè)表達(dá)式進(jìn)行更細(xì)粒度的權(quán)限控制,這里,我們將引入Spring 框架提供的一種動(dòng)態(tài)表達(dá)式語(yǔ)言—— SpEL(Spring Expression Language 的簡(jiǎn)稱)。

只要 SpEL 表達(dá)式的返回值為 true,access() 方法就允許用戶訪問(wèn),如下代碼所示:

@Overridepublic void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers('/orders').access('hasRole(’ROLE_USER’)');}

使用注解Spring Security 提供了 @PreAuthorize 注解也可以實(shí)現(xiàn)類似的效果,使用該注解代碼如下所示:

@RestController@RequestMapping(value='orders')public class OrderController { @PostMapping(value = '/') @PreAuthorize('hasRole(ROLE_ADMIN)') public void addOrder(@RequestBody Order order) {… }}

@PostAuthorize 主要用于請(qǐng)求結(jié)束之后檢查權(quán)限。

實(shí)現(xiàn)多維度訪問(wèn)授權(quán)方案

使用用戶級(jí)別保護(hù)服務(wù)訪問(wèn)該級(jí)別是最基本的資源保護(hù)級(jí)別,只要是認(rèn)證用戶就可能訪問(wèn)服務(wù)內(nèi)的各種資源。

@Configurationpublic class SpringCssSecurityConfig extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests() .anyRequest() .authenticated(); }}

使用用戶+角色級(jí)別保護(hù)服務(wù)訪問(wèn)該級(jí)別在認(rèn)證用戶級(jí)別的基礎(chǔ)上,還要求用戶屬于某一個(gè)或多個(gè)特定角色。

@Configurationpublic class SpringCssSecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers('/customers/**') .hasRole('ADMIN') .anyRequest() .authenticated(); }}

上述代碼表示只有'ADMIN'角色的認(rèn)證用戶才能訪問(wèn)以'/customers/'為根地址的所有 URL。

使用用戶+角色+操作級(jí)別保護(hù)服務(wù)訪問(wèn)該級(jí)別在認(rèn)證用戶+角色級(jí)別的基礎(chǔ)上,對(duì)某些 HTTP 操作方法做了訪問(wèn)限制。

@Configurationpublic class SpringCssSecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception{http.authorizeRequests().antMatchers(HttpMethod.DELETE, '/customers/**').hasRole('ADMIN').anyRequest().authenticated(); }}

上述代碼的效果在于對(duì)“/customers”端點(diǎn)執(zhí)行刪除操作時(shí),我們需要使用具有“ADMIN”角色的“springcss_admin”用戶,否則會(huì)出現(xiàn)“access_denied”錯(cuò)誤信息。

以上就是Spring Boot構(gòu)建系統(tǒng)安全層的步驟的詳細(xì)內(nèi)容,更多關(guān)于Spring Boot構(gòu)建系統(tǒng)安全層的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆网站免费在线观看| 国产欧美日韩综合一区在线播放| 国产欧美69| 日韩高清不卡一区二区| 日本在线成人| 日本不卡的三区四区五区| 日本一不卡视频| 清纯唯美亚洲综合一区| 美女精品在线观看| 美女精品在线| 日本色综合中文字幕| 欧美亚洲tv| 国产精品久久久久77777丨| 国产日韩欧美在线播放不卡| 久久国产日韩欧美精品| 国产精品亚洲欧美一级在线| 里番精品3d一二三区| 老司机免费视频一区二区三区| 另类欧美日韩国产在线| 国产一区二区三区四区大秀| 日韩国产一区| 国产一区清纯| 亚洲最新av| 日韩高清在线一区| 国产精区一区二区| 久久免费福利| 日韩精品一区二区三区免费观影| 欧美~级网站不卡| 日韩中文字幕区一区有砖一区| 日韩亚洲精品在线观看| 美女久久久精品| 理论片午夜视频在线观看| 欧美日韩水蜜桃| 亚洲五月综合| 国产精品chinese| а√天堂8资源在线| 1024精品久久久久久久久| 亚洲一区二区日韩| 国产精品主播| 最新中文字幕在线播放| 视频在线观看一区二区三区| 国产精品羞羞答答在线观看| 欧美成人基地| 日韩 欧美一区二区三区| 成人污污视频| 免费国产自线拍一欧美视频| 欧美国产专区| 夜夜精品视频| 老司机精品视频网| 99国产精品久久久久久久| 日韩精品免费一区二区夜夜嗨| 国产成人在线中文字幕| 中国女人久久久| 日韩av一区二| 日韩欧美1区| 亚洲综合福利| 国产麻豆久久| 91精品视频一区二区| 久久91导航| 日本在线视频一区二区| 91精品啪在线观看国产18| 日韩三区四区| 日韩精品影视| 国产欧美自拍| 在线 亚洲欧美在线综合一区| 国产精品日本一区二区三区在线| 欧美不卡高清| 国产免费av一区二区三区| 久久九九国产| 国产精品亚洲综合色区韩国| 欧美+亚洲+精品+三区| 精品淫伦v久久水蜜桃| 亚洲色图综合| 婷婷亚洲综合| 国产suv精品一区二区四区视频| 最新亚洲国产| 亚洲高清成人| 捆绑调教美女网站视频一区| 国产亚洲一区在线| 久久精品免费看| 日日夜夜免费精品视频| 亚洲电影在线| 天堂8中文在线最新版在线| 激情91久久| 国产+成+人+亚洲欧洲在线| 亚洲日产国产精品| 日韩国产一区| 久久一区精品| 91亚洲无吗| 玖玖玖国产精品| 高清不卡亚洲| 久久精品国产在热久久| 日韩va欧美va亚洲va久久| 久久福利精品| 国内精品福利| 久久九九精品| 成人日韩在线| 国产一区二区三区久久久久久久久| 综合一区二区三区| 中文精品在线| 午夜久久影院| 欧美成人午夜| 蜜桃视频在线网站| 国产aⅴ精品一区二区四区| 国产精东传媒成人av电影| 天海翼亚洲一区二区三区| 亚洲制服少妇| 99国产精品视频免费观看一公开| 婷婷国产精品| 久久免费黄色| 亚洲涩涩在线| 三上悠亚国产精品一区二区三区| 福利一区和二区| 精品中文字幕一区二区三区| 亚洲精品系列| 亚洲ww精品| 一区二区高清| 亚洲精品麻豆| 日本va欧美va精品发布| 青青青国产精品| 国产欧美日韩在线观看视频| 欧美一区91| 欧美日本二区| 国产精品一级| 久久精品国产久精国产爱| 久久99蜜桃| 久久只有精品| 中文字幕高清在线播放| 精精国产xxxx视频在线播放| 国内精品麻豆美女在线播放视频| 精品国产一区二| 国产一二在线播放| 欧美男人天堂| 欧美日韩中文一区二区| 亚洲免费一区二区| 亚洲精品成人一区| 国产私拍福利精品视频二区| 国产激情精品一区二区三区| 国产一区二区三区网| 日韩国产专区| 欧美日韩四区| 在线精品国产亚洲| 日本免费在线视频不卡一不卡二| 国产日韩欧美| 国产精品高潮呻吟久久久久| 福利精品在线| 亚洲性视频h| 亚洲深深色噜噜狠狠爱网站| 欧美片第1页综合| 久久久久久色 | 国产高清日韩| 卡一卡二国产精品| 亚洲不卡系列| 久久亚洲图片| 天堂俺去俺来也www久久婷婷| 国产精品毛片久久久| 欧美13videosex性极品| 国产一区二区中文| 中文字幕一区二区三区在线视频| 欧美日韩一区二区国产| 国产成人精品一区二区三区免费| 欧美一区二区性| 日韩综合一区二区三区| 精品国产鲁一鲁****| 亚洲天堂久久| 日本91福利区| 秋霞影院一区二区三区| 蜜桃久久精品一区二区| 国产精品欧美日韩一区| 国产成人精品免费视| 欧美日韩在线网站| 日韩精品社区| 三上悠亚国产精品一区二区三区 | 99热精品久久| 日韩在线观看中文字幕| 久久久久九九精品影院| 精品一区三区| 国产日韩一区二区三区在线 | 97精品中文字幕| 精品一区免费| 国产精品久久久久久久久免费高清| 午夜av成人| 午夜电影一区| 日韩欧美另类一区二区| 日韩在线观看中文字幕| 中文字幕色婷婷在线视频| 蜜臀av一区二区三区| 美女视频免费精品| 久久电影一区| 国产一区二区精品福利地址| aⅴ色国产欧美| 精品三级久久久| 久热re这里精品视频在线6| 精品视频高潮| 日本欧美在线看| 国产盗摄——sm在线视频| 蜜桃一区二区三区在线| 91综合网人人| 国产调教精品| 三级在线观看一区二区|