黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

面試題首頁 > Java權限管理框架面試題

SpringSecurity面試題

001SpringSecurity了解嗎?

Spring Security在架構上將認證與授權分離,并提供了擴展點。它是一個輕量級的安全框架,它確保基于Spring的應用程序提供身份驗證和授權支持。它與Spring MVC有很好地集成 ,并配備了流行的安全算法實現捆綁在一起。

002SpringSecurity執行流程?

1.客戶端發起一個請求,進入 Security 過濾器鏈。
2.當到 LogoutFilter 的時候判斷是否是登出路徑,如果是登出路徑則到 logoutHandler ,如果登出成功則到 logoutSuccessHandler 登出成功處理,如果登出失敗則由 ExceptionTranslationFilter ;如果不是登出路徑則直接進入下一個過濾器。
3.當到 UsernamePasswordAuthenticationFilter 的時候判斷是否為登錄路徑,如果是,則進入該過濾器進行登錄操作,如果登錄失敗則到 AuthenticationFailureHandler 登錄失敗處理器處理,如果登錄成功則到 AuthenticationSuccessHandler 登錄成功處理器處理,如果不是登錄請求則不進入該過濾器。
4.當到 FilterSecurityInterceptor 的時候會拿到 uri ,根據 uri 去找對應的鑒權管理器,鑒權管理器做鑒權工作,鑒權成功則到 Controller 層否則到 AccessDeniedHandler 鑒權失敗處理器處理。

003Shiro和SpringSecurity區別?

1)Shiro比Spring Security更容易使用,也就是實現上簡單一些,同時基本的授權認證Shiro也基本夠用
2)Spring Security社區支持度更高,Spring社區的親兒子,支持力度和更新維護上有優勢,同時和Spring這一套的結合較好。
3)Shiro功能強大、且 簡單、靈活。是Apache 下的項目比較可靠,且不跟任何的框架或者容器綁定,可以獨立運行。

004SpringSecurity如何解決跨域問題?

SpringSecurity中提供了專業的方式來解決預檢請求所面臨的問題:

@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實例,并配置跨域信息
? ? ? ? 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()方法開啟了對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實例,并配置跨域信息
? ? ? ? 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之后,調用http.addFilter方法將其添加到spring security過濾器鏈中,在過濾器鏈構建之前,會先對所有的過濾器進行排序,排序的依據在FilterOrderRegistration中已經定義好了:

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之前,這個時候還沒到認證過濾器。Spring security根據開發者提供的CorsConfigurationSource對象構建出一個CorsFilter,并將該過濾器置于認證過濾器之前。

005SpringSecurity如何對密碼進行加密?

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

public?interface?PasswordEncoder?{

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

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

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

官方推薦使用基于 bcrypt 強哈希函數的加密算法實現類。

006SpringSecurity如何優雅更換系統使用的加密算法?

推薦的做法是通過 DelegatingPasswordEncoder 兼容多種不同的密碼加密方案,以適應不同的業務需求。
DelegatingPasswordEncoder 其實就是一個代理類,并非是一種全新的加密算法,它做的事情就是代理上面提到的加密算法實現類。在 Spring Security 5.0 之后,默認就是基于 DelegatingPasswordEncoder 進行密碼加密的。

007SpringSecurity有哪些控制請求訪問權限的方法?

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

目錄

返回頂部
主站蜘蛛池模板: 久久久久国产一级毛片高清板 | 亚洲 国产 日韩 欧美 | 国产a一级毛片午夜剧院 | 国产欧美日韩在线视频 | 日本三级视频在线观看 | 日本一道高清不卡免费 | 天天爱天天做天天爽天天躁 | 波多野结衣中文字幕视频 | 黄 色 免费网 站 成 人 | 午夜影视在线视频观看免费 | 久久精品免视看国产明星 | 黄色免费观看 | 免费国产不卡午夜福在线观看 | 国产乱码精品一区二区三区网页版 | 看全色黄大色黄大片色责看的 | 国内精品一区二区在线观看 | 欧美精品一区二区三区久久 | 日韩高清网站 | 免费鲁丝片一级在线观看 | 顶级毛片在线手机免费看 | 最近中文字幕无免费视频 | 热99re久久精品天堂vr | 激情黄网| 久久青草18免费观看网站 | 美女黑丝网站 | 日韩在线 中文字幕 | 成人速播影院在线播放免费 | 免费污视频在线 | 最近最新中文字幕免费高清1 | 怡春院院日本一区二区久久 | 国产男女 爽爽爽爽视频 | 一级毛片一级毛片一级毛片 | 伊人天伊人天天网综合视频 | 国产一区二区成人 | 久久亚洲国产成人亚 | 成年男女男免费视频网站不卡 | 婷婷国产在线 | 亚洲欧美在线精品一区二区 | 日批视频网址免费观看 | 玖玖爱zh综合伊人久久 | 天天摸日日摸人人看 |