Spring Boot中使用 Spring Security 构建权限系统的示例代码

下面是详细讲解“Spring Boot中使用 Spring Security 构建权限系统的示例代码”的完整攻略,包含了两条示例:

1. 构建Spring Boot项目

首先,我们需要构建一个Spring Boot项目,可以使用Maven或Gradle来管理依赖并生成项目文件。

在项目中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. 配置Spring Security

在src/main/java下新建一个SecurityConfiguration类,并加上@Configuration和@EnableWebSecurity注解,如下所示:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().httpBasic();
    }
}

configure(HttpSecurity http)方法用于配置Spring Security的权限相关参数。这个例子中,我们指定任何请求都需要进行身份验证,并使用基本的表单登录方式进行验证。

3. 创建UserDetailsService

在src/main/java下新建一个UserDetailsServiceImpl类,并实现UserDetailsService,如下所示:

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        if (username.equals("admin")) {
            return new User("admin", "{noop}123456", new ArrayList<>());
        } else {
            throw new UsernameNotFoundException("User not found with username: " + username);
        }
    }
}

在这个例子中,我们使用了一个简单的用户名和密码来进行身份验证,并使用了“NoOpPasswordEncoder”来加密密码。在实际应用中,应该使用更加安全的加密方式。

4. 处理Spring Security未授权的访问

在src/main/java下新建一个RestAuthenticationEntryPoint类,并继承Http403ForbiddenEntryPoint类,如下所示:

@Component
public class RestAuthenticationEntryPoint extends Http403ForbiddenEntryPoint {
}

这个类的目的是处理Spring Security未授权的访问,返回403 Forbidden错误信息。

5. 处理Spring Security授权失败的访问

在src/main/java下新建一个RestAccessDeniedHandler类,并实现AccessDeniedHandler,如下所示:

@Component
public class RestAccessDeniedHandler implements AccessDeniedHandler {

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
        response.sendError(HttpServletResponse.SC_FORBIDDEN, "Access denied");
    }
}

这个类的目的是处理Spring Security授权失败的访问,返回403 Forbidden错误信息。

6. 创建Controller

在src/main/java下新建一个HelloController类,并添加@RestController和@RequestMapping注解,如下所示:

@RestController
@RequestMapping("/hello")
public class HelloController {

    @GetMapping("/admin")
    @PreAuthorize("hasRole('ADMIN')")
    public String admin() {
        return "Hello Admin";
    }

    @GetMapping("/user")
    @PreAuthorize("hasRole('USER')")
    public String user() {
        return "Hello User";
    }
}

这个类用于处理请求,其中admin()和user()方法使用@PreAuthorize注解进行权限控制,只有拥有对应角色的用户才能访问。

7. 运行项目

现在,我们已经完成了Spring Security权限系统的配置。可以启动项目,并尝试访问“/hello/admin”和“/hello/user”路径,查看权限控制是否有效。

8. 示例1:添加新用户

现在,我们来添加一个新用户,并赋予ADMIN角色。

可以在UserDetailsServiceImpl的loadUserByUsername()方法中添加如下代码:

if (username.equals("newuser")) {
    return new User("newuser", "{noop}123456", Collections.singletonList(new SimpleGrantedAuthority("ROLE_ADMIN")));
}

现在,我们已经添加了一个新用户,并给它赋予了ADMIN角色。可以使用这个新用户的用户名和密码进行登录和验证。

9. 示例2:定制登录界面

Spring Security提供了许多默认的登录界面,但我们也可以通过定制来使这个界面更加符合项目的主题需求。

可以在SecurityConfiguration类中添加如下代码:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().httpBasic().and().exceptionHandling().authenticationEntryPoint(new RestAuthenticationEntryPoint()).accessDeniedHandler(new RestAccessDeniedHandler());
}

在上面的代码中,我们指定了一个自定义的登录界面路径“/login”,并给这个路径添加了需要的权限和验证。

可以在src/main/resources/static下新建一个login.html文件,用于展示自定义的登录界面。适当地添加样式和脚本,可以使它更美观和实用。

参考文献:

[1] Spring Boot Security Example – UserDetailsService and Role-based Authentication

[2] Spring Security Custom Login Form Example

以上就是“Spring Boot中使用 Spring Security 构建权限系统的示例代码”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot中使用 Spring Security 构建权限系统的示例代码 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • SpringBoot2零基础到精通之配置文件与web开发

    配置文件 Spring Boot 项目中的配置文件一般有 application.properties 和 application.yml 两种,它们用于对应不同的属性配置和格式化方式,常见的属性配置包括数据库连接、端口号、日志级别等。其中,application.yml 文件的格式化方式相对更灵活,可以嵌套、缩进和列表项等等。 下面以 MySQL 数据库连…

    Java 2023年5月15日
    00
  • SpringBoot整合TKMyBatis实现单表增删改查操作

    下面将详细讲解“SpringBoot整合TKMyBatis实现单表增删改查操作”的完整攻略。 1. 导入依赖 首先,在项目的 pom.xml 文件中导入以下依赖: <!– SpringBoot Starter –> <dependency> <groupId>org.springframework.boot</g…

    Java 2023年6月15日
    00
  • Spring Boot实现登录验证码功能的案例详解

    Spring Boot实现登录验证码功能的案例详解 简介 最近,我在开发一个基于Spring Boot的Web应用程序时,需要实现一个登录验证码功能,以确保用户输入有效并防止暴力破解。在研究后,我发现可以通过添加一些依赖项和编写一些代码来轻松地实现此功能。在本文中,我将与您分享实现登录验证码功能的详细步骤。 步骤 步骤1:添加依赖 为了实现登录验证码功能,我…

    Java 2023年5月20日
    00
  • java实现多人聊天系统

    Java实现多人聊天系统需要考虑网络通信、多线程编程以及GUI等方面,下面我将为您提供完整攻略。 一、基本框架设计 1.客户端 客户端的基本框架设计如下: 登录界面:输入用户名和密码进行登录操作; 聊天窗口:展示聊天信息,提供发送聊天内容的输入框和发送按钮; 好友列表:展示当前在线的好友列表,支持选择好友进行私聊。 2.服务器端 服务器需要处理以下事项: 处…

    Java 2023年5月24日
    00
  • spring依赖注入知识点分享

    下面是关于“spring依赖注入知识点分享”的完整攻略。 一、什么是依赖注入 首先,我们需要先了解什么是依赖注入(Dependency Injection,DI)。 依赖注入是一个设计模式,通过该模式将一个对象的依赖关系插入进来,从而避免原本需要手工创建并降低了类与类之间的耦合度。在Spring框架中,依赖注入是通过IoC容器实现的。 二、Spring框架中…

    Java 2023年5月26日
    00
  • Java实战之兼职平台系统的实现

    Java实战之兼职平台系统的实现——完整攻略 前言 本文将介绍如何使用Java实现一个兼职平台系统,其中包括如何搭建项目框架、如何设计数据库、如何实现用户注册、登录、发布任务、接受任务等功能。 项目框架搭建 在开始实现具体功能之前,我们需要先搭建好项目的框架。我们推荐使用Spring Boot作为项目框架,因为它具有快速开发、易于维护等优点。下面是搭建项目框…

    Java 2023年5月18日
    00
  • Java文件操作之按行读取文件和遍历目录的方法

    针对“Java文件操作之按行读取文件和遍历目录的方法”,我为您提供以下攻略: 一、按行读取文件 1. BufferedReader按行读取 要按行读取文件,可以借助BufferedReader类。具体实现步骤如下: 创建文件,例如我们要读取的文件名为test.txt,存放在D:\test目录下,则创建文件实例代码如下: java File file = ne…

    Java 2023年5月19日
    00
  • 解决Tomcat启动失败:严重 [main] org.apache.catalina.util.LifecycleBase.handleSubClassException 初始化组件失败

    当我们使用Tomcat作为Web服务器时,有时会在启动过程中遇到“初始化组件失败”的错误提示,通常会伴随着“严重 [main] org.apache.catalina.util.LifecycleBase.handleSubClassException”这样的堆栈信息。这种问题的出现一般都是由于我们的应用程序存在一些不兼容、缺失或者错误的依赖库,或者是Tom…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部