117.info
人生若只如初见

SpringBoot怎么实现安全认证和授权

Spring Boot提供了Spring Security来实现安全认证和授权功能。下面是一个简单的示例来演示如何在Spring Boot中实现基本的安全认证和授权:

  1. 添加依赖:在pom.xml文件中添加Spring Security的依赖:

    org.springframework.boot
    spring-boot-starter-security

  1. 创建一个WebSecurityConfig类来配置安全规则:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/admin/**").hasRole("ADMIN")
            .antMatchers("/user/**").hasRole("USER")
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .and()
            .httpBasic();
    }
}
  1. 创建一个UserDetailsService实现类来获取用户信息:
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

@Service
public class CustomUserDetailsService implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        if ("admin".equals(username)) {
            return User.withDefaultPasswordEncoder().username("admin").password("admin").roles("ADMIN").build();
        } else if ("user".equals(username)) {
            return User.withDefaultPasswordEncoder().username("user").password("user").roles("USER").build();
        } else {
            throw new UsernameNotFoundException("User not found");
        }
    }
}
  1. 创建一个Controller来测试安全认证和授权:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping("/admin/test")
    public String adminTest() {
        return "Admin test";
    }

    @GetMapping("/user/test")
    public String userTest() {
        return "User test";
    }
}

这样就可以在Spring Boot中实现基本的安全认证和授权功能了。当访问/admin/test时需要ADMIN角色才能访问,访问/user/test时需要USER角色才能访问。可以通过配置WebSecurityConfig类来定义更复杂的安全规则和用户信息获取方式。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe249AzsIBgBWAV0.html

推荐文章

  • 怎么创建一个springboot项目

    要创建一个Spring Boot项目,可以按照以下步骤进行操作: 使用Spring Initializr快速生成项目: 访问 https://start.spring.io/,选择项目的基本信息,如项目名称...

  • springboot框架原理及流程是什么

    Spring Boot 是一个基于 Spring 框架的快速开发框架,它简化了 Spring 应用的开发过程,提供了一种快速构建可独立运行的生产级应用程序的方式。Spring Boot 的原...

  • springboot的作用和功能有哪些

    Spring Boot是一个开源的框架,它简化了Spring应用程序的开发和部署。它具有以下作用和功能: 简化配置:Spring Boot通过自动配置和约定大于配置的原则,减少了开...

  • springboot怎么读取本地文件

    在Spring Boot项目中读取本地文件可以通过使用Resource对象来实现。首先,需要将文件放置在resources文件夹下,然后可以使用ResourceLoader来加载文件。
    以...

  • php中bcsub的功能有哪些

    执行任意精度的减法计算:bcsub函数可以用于在PHP中执行任意精度的减法计算,即使操作数包含小数部分或超过PHP浮点数范围的整数也能够正确计算。 指定小数精度:...

  • Flume怎么实现实时数据的版本控制

    Flume 并不直接支持实时数据的版本控制,它主要用于数据采集、传输和处理。如果需要实现实时数据的版本控制,可以结合使用其他工具或技术,如: 使用 Apache Kaf...

  • SpringMVC中如何实现国际化

    Spring MVC中实现国际化主要有以下几个步骤: 配置MessageSource:在Spring的配置文件中配置一个MessageSource bean,用于加载国际化资源文件。可以使用Resource...

  • SpringMVC中怎么使用AOP

    在Spring MVC中使用AOP需要先定义切面(Aspect),然后将切面织入到需要增强的目标方法中。 创建切面类:编写一个类并使用@Aspect注解标识该类为切面类,同时在类...