Spring Boot集成Spring Cloud Security进行安全增强的方法

 更新时间:2024年11月25日 10:28:36   作者:wx_tangjinjinwx  
Spring Cloud Security是Spring Security的扩展,它提供了对Spring Cloud体系中的服务认证和授权的支持,包括OAuth2、JWT等,这篇文章主要介绍了Spring Boot集成Spring Cloud Security进行安全增强,需要的朋友可以参考下

Spring Boot集成Spring Cloud Security进行安全增强

大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!

在微服务架构中,服务的安全性是至关重要的。Spring Cloud Security提供了一套安全工具集,帮助开发者快速实现认证和授权。本文将介绍如何在Spring Boot应用中集成Spring Cloud Security来增强安全性。

一、Spring Cloud Security简介

Spring Cloud Security是Spring Security的扩展,它提供了对Spring Cloud体系中的服务认证和授权的支持,包括OAuth2、JWT等。

二、添加依赖

在Spring Boot项目的pom.xml中添加Spring Cloud Security的依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>

确保项目中已经包含了Spring Cloud的依赖管理。

三、配置Security

application.propertiesapplication.yml中配置Security:

security.oauth2.resource.id=juwatech-service
security.oauth2.resource.user-info-uri=http://localhost:9999/userinfo
security.oauth2.client.client-id=your-client-id
security.oauth2.client.client-secret=your-client-secret

四、启用Security

在Spring Boot应用中启用Spring Cloud Security:

package cn.juwatech.config;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/api/public/**").permitAll()
                .anyRequest().authenticated()
            .and()
                .oauth2ResourceServer()
                    .jwt();
    }
}

五、使用JWT进行令牌认证

配置JWT的解析和验证

package cn.juwatech.config;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter;
import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter;
@EnableWebSecurity
public class JwtSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter();
        jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(new JwtGrantedAuthoritiesConverter());
        http
            .oauth2Login()
                .and()
                .oauth2ResourceServer()
                    .jwt()
                    .jwtAuthenticationConverter(jwtAuthenticationConverter);
    }
}

使用@PreAuthorize@Secured注解进行方法级别的安全控制:

package cn.juwatech.controller;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SecuredController {
    @GetMapping("/secure-data")
    @PreAuthorize("hasAuthority('SCOPE_READ')")
    public String secureData() {
        return "Secure data";
    }
}

六、集成OAuth2.0认证服务器

添加OAuth2.0认证服务器依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

配置OAuth2.0认证服务器

package cn.juwatech.config;
import org.springframework.context.annotation.Bean;
import org.springframework.security.oauth2.provider.token.DefaultAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
@Configuration
public class OAuth2ServerConfig {
    @Bean
    public JwtAccessTokenConverter jwtAccessTokenConverter() {
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setSigningKey("secret");
        return converter;
    }
    @Bean
    public TokenStore tokenStore(JwtAccessTokenConverter converter) {
        return new JwtTokenStore(converter);
    }
    @Bean
    public DefaultAccessTokenConverter accessTokenConverter() {
        return new DefaultAccessTokenConverter();
    }
}

七、使用Spring Security Test支持

Spring Security提供了测试支持,可以简化安全性集成测试的编写。

package cn.juwatech.controller;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.test.context.support.WithAnonymousUser;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@SpringBootTest
@AutoConfigureMockMvc
public class SecurityControllerTest {
    @Autowired
    private MockMvc mockMvc;
    @Test
    @WithAnonymousUser
    public void testSecureEndpointWithoutAuthentication() throws Exception {
        mockMvc.perform(get("/secure-data"))
                .andExpect(status().isUnauthorized());
    }
    @Test
    @WithMockUser(authorities = "SCOPE_READ")
    public void testSecureEndpointWithAuthentication() throws Exception {
        mockMvc.perform(get("/secure-data"))
                .andExpect(status().isOk());
    }
}

八、总结

Spring Cloud Security为Spring Boot应用提供了一套完整的安全解决方案,支持OAuth2、JWT等多种认证和授权机制。通过简单的配置和代码注解,可以快速实现服务的安全性增强。同时,Spring Security的测试支持也简化了安全性集成测试的过程。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

到此这篇关于Spring Boot集成Spring Cloud Security进行安全增强的文章就介绍到这了,更多相关Spring Boot Spring Cloud Security增强内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot集成Redis,并自定义对象序列化操作

    SpringBoot集成Redis,并自定义对象序列化操作

    这篇文章主要介绍了SpringBoot集成Redis,并自定义对象序列化操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • java中对象的序列化与反序列化深入讲解

    java中对象的序列化与反序列化深入讲解

    这篇文章主要给大家介绍了关于java中对象的序列化与反序列化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • idea中的update project按钮使用

    idea中的update project按钮使用

    这篇文章主要介绍了idea中的update project按钮使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java泛型之上界下界通配符详解

    Java泛型之上界下界通配符详解

    这篇文章主要介绍了Java泛型之上界下界通配符详解,学习使用泛型编程时,更令人困惑的一个方面是确定何时使用上限有界通配符以及何时使用下限有界通配符。本文提供一些设计代码时要遵循的一些准则。,需要的朋友可以参考下
    2019-06-06
  • mybatis Example Criteria like 模糊查询问题

    mybatis Example Criteria like 模糊查询问题

    这篇文章主要介绍了mybatis Example Criteria like 模糊查询问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 详解SpringBoot封装使用JDBC

    详解SpringBoot封装使用JDBC

    这篇文章主要介绍了SpringBoot封装JDBC使用教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 使用HttpServletResponse对象获取请求行信息

    使用HttpServletResponse对象获取请求行信息

    这篇文章主要介绍了使用HttpServletResponse对象获取请求行信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 详解JAVA中ListIterator和Iterator的辨析

    详解JAVA中ListIterator和Iterator的辨析

    这篇文章主要为大家详细介绍了JAVAListIterator和Iterator的辨析,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • SpringBoot如何实现文件下载

    SpringBoot如何实现文件下载

    这篇文章主要介绍了SpringBoot如何实现文件下载问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Spring Security 实现用户名密码登录流程源码详解

    Spring Security 实现用户名密码登录流程源码详解

    在服务端的安全管理使用了Spring Security,用户登录成功之后,Spring Security帮你把用户信息保存在Session里,但是具体保存在哪里,要是不深究你可能就不知道,今天小编就带大家具体了解一下Spring Security实现用户名密码登录的流程
    2021-11-11

最新评论