99在线精品视频高潮喷吹网站_艾草无码视频网站_2023国产区精华品_18禁片无遮挡免_鲁丝一区鲁丝二区鲁丝去

當(dāng)前位置: 首頁 >  綜合 > 正文

Spring Boot的安全配置(二) 消息

2023-04-06 15:29:35 來源:騰訊云


(相關(guān)資料圖)

配置OAuth 2.0身份驗證

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

以下是使用Java配置實現(xiàn)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()表示進(jìn)行授權(quán)請求。.antMatchers("/", "/login**").permitAll()表示允許訪問主頁和登錄頁面,而不需要進(jìn)行身份驗證。.anyRequest().authenticated()表示所有其他請求都需要進(jìn)行身份驗證。.logout()方法指定了注銷的URL和成功注銷后的跳轉(zhuǎn)頁面。.csrf().disable()表示禁用跨站請求偽造保護(hù)。.addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class)表示在BasicAuthenticationFilter之前添加OAuth2ClientAuthenticationProcessingFilter過濾器。

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

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

3.0授權(quán)的示例:

@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()表示進(jìn)行授權(quán)請求。.antMatchers("/admin/**").hasRole("ADMIN")表示要求管理員角色才能訪問/admin路徑。.antMatchers("/user/**").hasAnyRole("ADMIN", "USER")表示要求管理員或用戶角色才能訪問/user路徑。.antMatchers("/**").permitAll()表示允許訪問所有其他路徑。.formLogin()表示啟用表單登錄。

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

以上是Spring Boot中基于OAuth 2.0和基于授權(quán)的安全配置示例。在實際開發(fā)中,您可以根據(jù)需要進(jìn)行更改和擴展。

標(biāo)簽:

<  上一篇

雨水拜拜,湖北陽光明起上線!最高氣溫升至24℃

下一篇 >

節(jié)約用水協(xié)調(diào)機制2023年度工作要點來了-每日熱議