大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

面試題首頁(yè) > Java權(quán)限管理框架面試題

SpringSecurity面試題

001SpringSecurity了解嗎?

Spring Security在架構(gòu)上將認(rèn)證與授權(quán)分離,并提供了擴(kuò)展點(diǎn)。它是一個(gè)輕量級(jí)的安全框架,它確保基于Spring的應(yīng)用程序提供身份驗(yàn)證和授權(quán)支持。它與Spring MVC有很好地集成 ,并配備了流行的安全算法實(shí)現(xiàn)捆綁在一起。

002SpringSecurity執(zhí)行流程?

1.客戶端發(fā)起一個(gè)請(qǐng)求,進(jìn)入 Security 過(guò)濾器鏈。
2.當(dāng)?shù)?LogoutFilter 的時(shí)候判斷是否是登出路徑,如果是登出路徑則到 logoutHandler ,如果登出成功則到 logoutSuccessHandler 登出成功處理,如果登出失敗則由 ExceptionTranslationFilter ;如果不是登出路徑則直接進(jìn)入下一個(gè)過(guò)濾器。
3.當(dāng)?shù)?UsernamePasswordAuthenticationFilter 的時(shí)候判斷是否為登錄路徑,如果是,則進(jìn)入該過(guò)濾器進(jìn)行登錄操作,如果登錄失敗則到 AuthenticationFailureHandler 登錄失敗處理器處理,如果登錄成功則到 AuthenticationSuccessHandler 登錄成功處理器處理,如果不是登錄請(qǐng)求則不進(jìn)入該過(guò)濾器。
4.當(dāng)?shù)?FilterSecurityInterceptor 的時(shí)候會(huì)拿到 uri ,根據(jù) uri 去找對(duì)應(yīng)的鑒權(quán)管理器,鑒權(quán)管理器做鑒權(quán)工作,鑒權(quán)成功則到 Controller 層否則到 AccessDeniedHandler 鑒權(quán)失敗處理器處理。

003Shiro和SpringSecurity區(qū)別?

1)Shiro比Spring Security更容易使用,也就是實(shí)現(xiàn)上簡(jiǎn)單一些,同時(shí)基本的授權(quán)認(rèn)證Shiro也基本夠用
2)Spring Security社區(qū)支持度更高,Spring社區(qū)的親兒子,支持力度和更新維護(hù)上有優(yōu)勢(shì),同時(shí)和Spring這一套的結(jié)合較好。
3)Shiro功能強(qiáng)大、且 簡(jiǎn)單、靈活。是Apache 下的項(xiàng)目比較可靠,且不跟任何的框架或者容器綁定,可以獨(dú)立運(yùn)行。

004SpringSecurity如何解決跨域問(wèn)題?

SpringSecurity中提供了專業(yè)的方式來(lái)解決預(yù)檢請(qǐng)求所面臨的問(wèn)題:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
? ? @Override
? ? protected void configure(HttpSecurity http) throws Exception {
? ? ? ? http.authorizeRequests()
? ? ? ? ? ? ? ? .anyRequest().authenticated()
? ? ? ? ? ? ? ? .and()
? ? ? ? ? ? ? ? .httpBasic()
? ? ? ? ? ? ? ? .and()
? ? ? ? ? ? ? ? // 開啟跨域配置
? ? ? ? ? ? ? ? .cors()
? ? ? ? ? ? ? ? .configurationSource(corsConfigurationSource())
? ? ? ? ? ? ? ? .and()
? ? ? ? ? ? ? ? .csrf().disable();
? ? }

? ? CorsConfigurationSource corsConfigurationSource() {
? ? ? ? // 提供CorsConfiguration實(shí)例,并配置跨域信息
? ? ? ? CorsConfiguration corsConfiguration = new CorsConfiguration();
? ? ? ? corsConfiguration.setAllowedHeaders(Arrays.asList("*"));
? ? ? ? corsConfiguration.setAllowedMethods(Arrays.asList("*"));
? ? ? ? corsConfiguration.setAllowedOrigins(Arrays.asList("http://localhost:8081"));
? ? ? ? corsConfiguration.setMaxAge(3600L);
? ? ? ? UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
? ? ? ? source.registerCorsConfiguration("/**", corsConfiguration);
? ? ? ? return source;
? ? }
}

cors()方法開啟了對(duì)CorsConfigurer的配置,其最重要的方法就是configure方法:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
? ? @Override
? ? protected void configure(HttpSecurity http) throws Exception {
? ? ? ? http.authorizeRequests()
? ? ? ? ? ? ? ? .anyRequest().authenticated()
? ? ? ? ? ? ? ? .and()
? ? ? ? ? ? ? ? .httpBasic()
? ? ? ? ? ? ? ? .and()
? ? ? ? ? ? ? ? // 開啟跨域配置
? ? ? ? ? ? ? ? .cors()
? ? ? ? ? ? ? ? .configurationSource(corsConfigurationSource())
? ? ? ? ? ? ? ? .and()
? ? ? ? ? ? ? ? .csrf().disable();
? ? }

? ? CorsConfigurationSource corsConfigurationSource() {
? ? ? ? // 提供CorsConfiguration實(shí)例,并配置跨域信息
? ? ? ? CorsConfiguration corsConfiguration = new CorsConfiguration();
? ? ? ? corsConfiguration.setAllowedHeaders(Arrays.asList("*"));
? ? ? ? corsConfiguration.setAllowedMethods(Arrays.asList("*"));
? ? ? ? corsConfiguration.setAllowedOrigins(Arrays.asList("http://localhost:8081"));
? ? ? ? corsConfiguration.setMaxAge(3600L);
? ? ? ? UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
? ? ? ? source.registerCorsConfiguration("/**", corsConfiguration);
? ? ? ? return source;
? ? }
}

拿到CorsFilter之后,調(diào)用http.addFilter方法將其添加到spring security過(guò)濾器鏈中,在過(guò)濾器鏈構(gòu)建之前,會(huì)先對(duì)所有的過(guò)濾器進(jìn)行排序,排序的依據(jù)在FilterOrderRegistration中已經(jīng)定義好了:

FilterOrderRegistration() {
? ? Step order = new Step(INITIAL_ORDER, ORDER_STEP);
? ? put(ChannelProcessingFilter.class, order.next());
? ? order.next(); // gh-8105
? ? put(WebAsyncManagerIntegrationFilter.class, order.next());
? ? put(SecurityContextPersistenceFilter.class, order.next());
? ? put(HeaderWriterFilter.class, order.next());
? ? put(CorsFilter.class, order.next());
? ? put(CsrfFilter.class, order.next());
? ? put(LogoutFilter.class, order.next());
? ? // ...
}

可以看到,CorsFilter的位置在HeaderWriterFilter之后,在CsrfFilter之前,這個(gè)時(shí)候還沒(méi)到認(rèn)證過(guò)濾器。Spring security根據(jù)開發(fā)者提供的CorsConfigurationSource對(duì)象構(gòu)建出一個(gè)CorsFilter,并將該過(guò)濾器置于認(rèn)證過(guò)濾器之前。

005SpringSecurity如何對(duì)密碼進(jìn)行加密?

Spring Security 提供了多種加密算法的實(shí)現(xiàn),開箱即用,非常方便。這些加密算法實(shí)現(xiàn)類的父類是 PasswordEncoder ,如果你想要自己實(shí)現(xiàn)一個(gè)加密算法的話,也需要繼承 PasswordEncoder。
PasswordEncoder 接口一共也就 3 個(gè)必須實(shí)現(xiàn)的方法。

public?interface?PasswordEncoder?{

????//?加密也就是對(duì)原始密碼進(jìn)行編碼
????String?encode(CharSequence?var1);

????//?比對(duì)原始密碼和數(shù)據(jù)庫(kù)中保存的密碼
????boolean?matches(CharSequence?var1,?String?var2);

????//?判斷加密密碼是否需要再次進(jìn)行加密,默認(rèn)返回?false
????default?boolean?upgradeEncoding(String?encodedPassword)?{
????????return?false;
????}
}

官方推薦使用基于 bcrypt 強(qiáng)哈希函數(shù)的加密算法實(shí)現(xiàn)類。

006SpringSecurity如何優(yōu)雅更換系統(tǒng)使用的加密算法?

推薦的做法是通過(guò) DelegatingPasswordEncoder 兼容多種不同的密碼加密方案,以適應(yīng)不同的業(yè)務(wù)需求。
DelegatingPasswordEncoder 其實(shí)就是一個(gè)代理類,并非是一種全新的加密算法,它做的事情就是代理上面提到的加密算法實(shí)現(xiàn)類。在 Spring Security 5.0 之后,默認(rèn)就是基于 DelegatingPasswordEncoder 進(jìn)行密碼加密的。

007SpringSecurity有哪些控制請(qǐng)求訪問(wèn)權(quán)限的方法?

● permitAll() :無(wú)條件允許任何形式訪問(wèn),不管你登錄還是沒(méi)有登錄。
● anonymous() :允許匿名訪問(wèn),也就是沒(méi)有登錄才可以訪問(wèn)。
● denyAll() :無(wú)條件決絕任何形式的訪問(wèn)。
● authenticated():只允許已認(rèn)證的用戶訪問(wèn)。
● fullyAuthenticated() :只允許已經(jīng)登錄或者通過(guò) remember-me 登錄的用戶訪問(wèn)。
● hasRole(String) : 只允許指定的角色訪問(wèn)。
● hasAnyRole(String) : 指定一個(gè)或者多個(gè)角色,滿足其一的用戶即可訪問(wèn)。
● hasAuthority(String) :只允許具有指定權(quán)限的用戶訪問(wèn)
● hasAnyAuthority(String) :指定一個(gè)或者多個(gè)權(quán)限,滿足其一的用戶即可訪問(wèn)。
● hasIpAddress(String) : 只允許指定 ip 的用戶訪問(wèn)。

目錄

返回頂部
主站蜘蛛池模板: 九九在线精品视频xxx | 成人午夜毛片在线看 | 99热这里只有精品2 99热这里只有精品3 | 中文一区 | 成人看免费一级毛片 | 国产精品日本一区二区在线播放 | 天天干天天草 | 久久综合免费 | 久久最近最新中文字幕大全 | 午夜久久久 | 纯欧美一级毛片免费 | 午夜精品久久影院蜜桃 | 亚洲综合色区图片区 | 色中色综合 | 波多野结衣免费一区二区三区香蕉 | 国产一区二区精品久久凹凸 | 看黄网站在线观看 | 国产高清精品一区 | 国产一区二区免费 | 亚洲天堂777 | 天天做天天爱夜夜大爽完整 | 亚洲精品性夜夜夜 | www.色婷婷| 欧美成人毛片一级在线 | 亚洲一区二区视频 | 香蕉碰碰人人a久久动漫精品 | 92精品国产自产在线观看 | 欧美3区 | 午夜精品久久久久 | 视频二区 中文字幕 欧美 | 国产精品色婷婷在线观看 | 涩涩99| 国产高清免费视频 | 四虎www免费人成 | 爱爱的免费视频 | 国产区精品福利在线观看精品 | 中文字幕日本一区久久 | 99爱视频在线观看免费播放 | 中文字幕在线观看免费 | 伊人久久综在合线亚洲91 | 中国护士一级毛片免费版本 |