• <strike id="800qq"></strike>
    <ul id="800qq"></ul>
    
    
    <ul id="800qq"><tbody id="800qq"></tbody></ul>
  • 您的位置:要聞 > 正文

    Spring Boot的安全配置(二)

    來源: 時間:2023-04-07 08:24:28


    (資料圖片僅供參考)

    配置OAuth 2.0身份驗證

    OAuth 2.0是一種授權協議,允許用戶授權第三方應用程序訪問他們的資源。在Spring Boot中,可以使用spring-security-oauth2-autoconfigure庫來實現OAuth 2.0身份驗證。該庫提供了一些可用的OAuth 2.0身份驗證客戶端,包括Facebook、GitHub、Google和Twitter等。

    以下是使用Java配置實現GitHub OAuth2.0身份驗證的示例:

    @Configuration@EnableOAuth2Ssopublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http.antMatcher("/**")            .authorizeRequests()            .antMatchers("/", "/login**")            .permitAll()            .anyRequest()            .authenticated()            .and()            .logout()            .logoutSuccessUrl("/")            .permitAll()            .and()            .csrf().disable()            .addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);    }    @Bean    public FilterRegistrationBean oauth2ClientFilterRegistration(OAuth2ClientContextFilter filter) {        FilterRegistrationBean registration = new FilterRegistrationBean();        registration.setFilter(filter);        registration.setOrder(-100);        return registration;    }    @Bean    public Filter ssoFilter() {        OAuth2ClientAuthenticationProcessingFilter githubFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/github");        OAuth2RestTemplate githubTemplate = new OAuth2RestTemplate(github(), oauth2ClientContext);        githubFilter.setRestTemplate(githubTemplate);        UserInfoTokenServices tokenServices = new UserInfoTokenServices(githubResource().getUserInfoUri(), github().getClientId());        tokenServices.setRestTemplate(githubTemplate);        githubFilter.setTokenServices(tokenServices);        return githubFilter;    }    @Bean    public OAuth2ProtectedResourceDetails github() {        ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails();        details.setClientId("");        details.setClientSecret("");        details.setAccessTokenUri("");        details.setScope(Arrays.asList("", ""));        return details;    }    @Bean    public ResourceServerProperties githubResource() {        ResourceServerProperties resource = new ResourceServerProperties();        resource.setUserInfoUri("");        return resource;    }    @Autowired    private OAuth2ClientContext oauth2ClientContext;}

    在上面的示例中,SecurityConfig類使用@EnableOAuth2Sso注解啟用OAuth 2.0單點登錄。configure()方法使用HttpSecurity對象來配置HTTP請求的安全性。.antMatcher("/**")表示攔截所有請求。.authorizeRequests()表示進行授權請求。.antMatchers("/", "/login**").permitAll()表示允許訪問主頁和登錄頁面,而不需要進行身份驗證。.anyRequest().authenticated()表示所有其他請求都需要進行身份驗證。.logout()方法指定了注銷的URL和成功注銷后的跳轉頁面。.csrf().disable()表示禁用跨站請求偽造保護。.addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class)表示在BasicAuthenticationFilter之前添加OAuth2ClientAuthenticationProcessingFilter過濾器。

    oauth2ClientFilterRegistration()方法使用FilterRegistrationBean注冊OAuth2ClientContextFilter過濾器。

    ssoFilter()方法創建OAuth2ClientAuthenticationProcessingFilter過濾器,它將處理"/login/github"路徑的請求。OAuth2RestTemplate對象提供了GitHub OAuth 2.0客戶端的訪問令牌。UserInfoTokenServices對象使用OAuth2RestTemplate對象來訪問GitHub資源服務器,并驗證訪問令牌。github()方法創建ClientCredentialsResourceDetails對象,它包含GitHub OAuth 2.0客戶端的詳細信息,例如客戶端ID和客戶端秘鑰。ResourceServerProperties對象指定了GitHub資源服務器的用戶信息URI。

    3.0授權的示例:

    @Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http.authorizeRequests()            .antMatchers("/admin/**").hasRole("ADMIN")            .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")            .antMatchers("/**").permitAll()            .and()            .formLogin();    }    @Autowired    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {        auth.inMemoryAuthentication()            .withUser("user")            .password("{noop}password")            .roles("USER")            .and()            .withUser("admin")            .password("{noop}password")            .roles("ADMIN");    }}

    在上面的示例中,SecurityConfig類使用@EnableWebSecurity注解啟用Spring Security。configure()方法使用HttpSecurity對象來配置HTTP請求的安全性。.authorizeRequests()表示進行授權請求。.antMatchers("/admin/**").hasRole("ADMIN")表示要求管理員角色才能訪問/admin路徑。.antMatchers("/user/**").hasAnyRole("ADMIN", "USER")表示要求管理員或用戶角色才能訪問/user路徑。.antMatchers("/**").permitAll()表示允許訪問所有其他路徑。.formLogin()表示啟用表單登錄。

    configureGlobal()方法使用AuthenticationManagerBuilder對象來配置身份驗證。inMemoryAuthentication()方法指定了在內存中存儲用戶憑據。.withUser("user").password("{noop}password").roles("USER")指定了用戶名、密碼和角色,其中{noop}前綴表示密碼以明文形式存儲在內存中。.withUser("admin").password("{noop}password").roles("ADMIN")指定了管理員用戶的用戶名、密碼和角色。

    以上是Spring Boot中基于OAuth 2.0和基于授權的安全配置示例。在實際開發中,您可以根據需要進行更改和擴展。

    關鍵詞:

    精彩推送

    公司

    吉卜力工作室如今已加入到主題公園的浪潮,并于11月1日正式對公眾開放全球首個項目,將《龍貓》等經典作品的場景復原至現實世界。對于吉卜

    詳細>>

    隨著在線旅游企業數量的不斷增多,售賣不合理低價旅游產品、違規利用用戶個人信息等問題也時有發生。11月1日,文旅部發布《文化和旅游部關

    詳細>>

    兩個小時,這是越南全國首票榴蓮從裝車到運送至我國廣西崇左友誼關口岸的時間。得益于一體化供應鏈,2021年,中國與越南進出口貿易額達到23

    詳細>>

    11月1日,北京商報記者梳理發現,截至9月末,10家A股上市農商行資產規模均有所擴大,重慶農商行、上海農商行仍以萬億元總資產位居前列。營

    詳細>>

    西貝餐飲集團(以下簡稱西貝)在兒童餐的道路上越走越深。11月1日,北京商報記者從西貝獲悉,其將推出西貝兒童餐零售產品。目前,部分西貝門

    詳細>>

    新一期麻辣粉和逆回購操作如期公布。9月15日,央行發布消息稱,為維護銀行體系流動性合理充裕,開展4000億元中期借貸便利(MLF)操作和20億元

    詳細>>
    久久久久久亚洲精品无码| 亚洲一区二区三区偷拍女厕| 亚洲av成人无码久久精品| 亚洲av无码潮喷在线观看| 亚洲日日做天天做日日谢| 国产日韩亚洲大尺度高清| 亚洲AV日韩AV一区二区三曲| 亚洲综合av一区二区三区不卡| 亚洲美女一区二区三区| 亚洲国产精品不卡在线电影| 色久悠悠婷婷综合在线亚洲| 亚洲Aⅴ无码一区二区二三区软件| 亚洲成a人无码亚洲成www牛牛| 亚洲人成网站在线播放2019| 亚洲日本在线免费观看| 亚洲2022国产成人精品无码区| 亚洲AV无码一区二区乱子伦| 亚洲AV电影院在线观看| 国产亚洲精品精华液| 无码久久精品国产亚洲Av影片| 久久久综合亚洲色一区二区三区| 久久精品国产亚洲AV麻豆不卡| 婷婷久久久亚洲欧洲日产国码AV| 亚洲bt加勒比一区二区| 久久精品亚洲中文字幕无码麻豆 | 亚洲综合国产一区二区三区| 亚洲色偷偷偷鲁综合| 亚洲av无码片在线播放| 亚洲国产综合91精品麻豆| 久久久久亚洲av无码专区喷水| 亚洲精彩视频在线观看| 亚洲一区动漫卡通在线播放| 日韩亚洲产在线观看| 久久精品亚洲日本波多野结衣| 亚洲成a人片在线观看久| 亚洲精品国产精品乱码不卞 | 亚洲高清美女一区二区三区| 亚洲成在人线在线播放无码| 亚洲不卡AV影片在线播放| 国产乱辈通伦影片在线播放亚洲 | 亚洲日本VA午夜在线电影|