SpringBoot SpringSecurity 介绍(基于内存的验证)

 SpringBoot已经为用户采用默认配置,只需要引入pom依赖就能快速启动Spring Security。
目的:验证请求用户的身份,提供安全访问
优势:基于Spring,配置方便,减少大量代码

image

内置访问控制方法

  • permitAll() 表示所匹配的 URL 任何人都允许访问。
  • authenticated() 表示所匹配的 URL 都需要被认证才能访问。
  • anonymous() 表示可以匿名访问匹配的 URL 。和 permitAll() 效果类似,只是设置为 anonymous() 的 url 会执行 filter 链中
  • denyAll() 表示所匹配的 URL 都不允许被访问。
  • rememberMe() 被“remember me”的用户允许访问 这个有点类似于很多网站的十天内免登录,登陆一次即可记住你,然后未来一段时间不用登录。
  • fullyAuthenticated() 如果用户不是被 remember me 的,才可以访问。也就是必须一步一步按部就班的登录才行。

角色权限判断

  • hasAuthority(String) 判断用户是否具有特定的权限,用户的权限是在自定义登录逻辑
  • hasAnyAuthority(String ...) 如果用户具备给定权限中某一个,就允许访问
  • hasRole(String) 如果用户具备给定角色就允许访问。否则出现 403
  • hasAnyRole(String ...) 如果用户具备给定角色的任意一个,就允许被访问
  • hasIpAddress(String) 如果请求是指定的 IP 就运行访问。可以通过 request.getRemoteAddr() 获取 ip 地址

引用 Spring Security

Pom 文件中添加

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

点击查看POM代码

 

运行后会自动生成 password 默认用户名为: user

image

默认配置每次都启动项目都会重新生成密码,同时用户名和拦截请求也不能自定义,在实际应用中往往需要自定义配置,因此接下来对Spring Security进行自定义配置。

配置 Spring Security (入门)

在内存中(简化环节,了解逻辑)配置两个用户角色(admin和user),设置不同密码;
同时设置角色访问权限,其中admin可以访问所有路径(即/*),user只能访问/user下的所有路径。

自定义配置类,实现WebSecurityConfigurerAdapter接口,WebSecurityConfigurerAdapter接口中有两个用到的 configure()方法,其中一个配置用户身份,另一个配置用户权限:

配置用户身份的configure()方法:

SecurityConfig

package com.vipsoft.web.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
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;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    /**
     * 配置用户身份的configure()方法
     *
     * @param auth
     * @throws Exception
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        //简化操作,将用户名和密码存在内存中,后期会存放在数据库、Redis中
        auth.inMemoryAuthentication()
                .passwordEncoder(passwordEncoder)
                .withUser("admin")
                .password(passwordEncoder.encode("888"))
                .roles("ADMIN")
                .and()
                .withUser("user")
                .password(passwordEncoder.encode("666"))
                .roles("USER");
    }

    /**
     * 配置用户权限的configure()方法
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                //配置拦截的路径、配置哪类角色可以访问该路径
                .antMatchers("/user").hasAnyRole("USER")
                .antMatchers("/*").hasAnyRole("ADMIN")
                //配置登录界面,可以添加自定义界面, 没添加则用系统默认的界面
                .and().formLogin();

    }
}

添加接口测试用


package com.vipsoft.web.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 DefaultController {

    @GetMapping("/")
    @PreAuthorize("hasRole('ADMIN')")
    public String demo() {
        return "Welcome";
    }

    @GetMapping("/user/list")
    @PreAuthorize("hasAnyRole('ADMIN','USER')")
    public String getUserList() {
        return "User List";
    }

    @GetMapping("/article/list")
    @PreAuthorize("hasRole('ADMIN')")
    public String getArticleList() {
        return "Article List";
    }
} 

image

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spring Boot是一个基于Spring框架的快速开发应用程序的工具,可以简化配置和开发过程。而Spring SecuritySpring框架的一个扩展模块,用于提供安全框架和身份认证,实现用户认证与授权的常用操作。Spring BootSpring Security的结合,可以轻松实现应用程序的安全性。 Spring BootSpring Security结合的示例程序可以从官网和GitHub上获取。示例程序包括登录验证、用户授权管理等功能。在编写代码前,需要先增加Spring Security的依赖,并在配置文件中配置相关信息。例如,配置登录页面、禁用某些页面访问、设置账号密码等信息。配置完成后,编写控制器和视图,实现登录页面的显示并处理账号密码验证等操作。在完成这些基本操作后,还可以添加一些高级特性,如Remember-me、Session级别授权等等。 Spring BootSpring Security示例程序的好处在于它可以为初学者提供完整的代码示例,使学习者在实践中掌握Spring BootSpring Security结合的基本原理和操作方法。同时,示例程序还包含了许多安全问题的处理方法,如CSRF、XSS攻击等,对理解Web应用安全方面的知识也有帮助。总之,Spring BootSpring Security结合的示例程序是一个非常好的入门学习教程,适合Java、Web开发初学者使用。 ### 回答2: Spring Boot是一个用于构建微服务应用程序的框架,它使用了各种开箱即用的组件,可以使开发人员快速构建应用程序。而Spring Security则是Spring框架中负责安全认证和授权的模块,可以为应用程序提供强大的安全保障。在实际应用开发中,Spring BootSpring Security常常一起使用,以提供更全面的解决方案。 为了展示Spring BootSpring Security的典型应用场景,我们可以考虑使用示例程序来介绍。对于Spring BootSpring Security的初学者来说,最好的方式就是借助示例代码来理解各种组件的作用和使用方法。 不同的示例程序涉及的应用场景也不同,例如常见的基于用户名密码认证、基于角色授权、集成社交账号登录等。这些示例程序可以帮助开发人员快速入门,同时也可以为开发者在实现自己的应用程序时提供参考和灵感。 总之,Spring BootSpring Security的示例程序为我们提供了一个学习、理解和应用这些技术的良好平台。希望我们可以通过学习这些示例程序,真正掌握并熟练运用Spring BootSpring Security技术栈,从而为我们的实际应用开发提供更全面的保障和支持。 ### 回答3: Spring Boot是一个Java开源框架,它用于创建基于Spring的应用程序。Spring Security则是一个用于处理认证和授权的安全框架。Spring BootSpring Security的结合使用可以创建更加安全和可靠的Spring应用程序。 Spring BootSpring Security的结合使用示例需要完成以下步骤: 1. 配置Spring Boot依赖:在pom.xml文件中添加Spring BootSpring Security的依赖,包括spring-boot-starter-web和spring-boot-starter-security。 2. 配置Spring Security:在应用程序中使用注解和配置文件来配置Spring Security,例如通过@EnableWebSecurity注解开启Web安全,定义安全配置类。 3. 配置用户和角色:在应用程序中定义用户和角色,并将它们存储在数据库或内存中。同时,还需要为用户和角色分配权限。 4. 实现认证和授权功能:在安全配置类中实现认证和授权功能,例如使用Spring Security提供的form-based认证或基于HTTP认证方式。 5. 安全注解的使用:在应用程序的Controller层中使用Spring Security提供的注解来限制访问,例如使用@PreAuthorize来限制某些角色或权限才能访问某个路径。 综上所述,Spring BootSpring Security是一个可靠和安全Java应用程序开发选项,并且可以在示例中结合使用,让开发人员实现更好的安全性和可靠性需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

woisking2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值