当前位置: 代码网 > it编程>编程语言>Java > Spring Boot集成Spring Cloud Security进行安全增强的方法

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

2024年11月26日 Java 我要评论
spring boot集成spring cloud security进行安全增强大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在微服务架构中,服务的安全性是至关重要

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增强内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com