【Spring Security】004-Spring Security web权限方案(2):用户授权

目录

一、用户授权

1、基于权限访问控制

指定单个权限可访问:

指定多个权限可访问:

2、基于角色访问控制

指定单个角色可访问:

指定多个角色可访问:

3、自定义403页面

概述:

第一步:在配置类MySecurityConfig中设置跳转到自定义的403页面

第二步:在MyUserDetailsService中给返回的对象设置权限

第三步:编写自定义的403页面unauth.html

第四步:访问测试

4、注解的使用

@Secured:

@PreAuthorize:

@PostAuthorize:

@PostFilter:

@PreFilter:


一、用户授权

1、基于权限访问控制

指定单个权限可访问:

hasAuthority 方法概述:

如果当前的主体具有指定的权限,则返回 true,否则返回 false;

只能指定一个权限,无法指定多个权限都可访问;

第一步:在配置类MySecurityConfig中设置当前访问地址有哪个权限才可以访问

第二步:在MyUserDetailsService中给返回的对象设置权限

第三步:访问测试

 

指定多个权限可访问:

hasAnyAuthority 方法概述:

如果当前的主体有任何提供的角色(给定的作为一个逗号分隔的字符串列表)的话,返回true;

简单地说就是:指定多个权限都可访问;

第一步:在配置类MySecurityConfig中设置当前访问地址有哪些权限才可以访问

第二步:访问测试

 

2、基于角色访问控制

指定单个角色可访问:

hasRole 方法概述:

如果用户具备给定角色就允许访问,否则出现 403;

如果当前主体具有指定的角色,则返回 true;

看一下源码:

基于角色与基于权限的访问使用起来基本一致,有下面的些许差异;

第一步:在配置类MySecurityConfig中设置当前访问地址有哪个角色才可以访问

第二步:在MyUserDetailsService中给返回的对象添加权限

注意在sale前面加上ROLE_;

第三步:访问测试

 

指定多个角色可访问:

hasAnyRole方法概述:

表示用户具备任何一个条件都可以访问;

第一步:在配置类MySecurityConfig中设置当前访问地址有哪些角色才可以访问

第二步:访问测试

 

3、自定义403页面

概述:

前面基于权限访问和基于角色访问,如果没有权限会挑战到403页面,我们这里对403页面进行自定义!

第一步:在配置类MySecurityConfig中设置跳转到自定义的403页面

 

第二步:在MyUserDetailsService中给返回的对象设置权限

 

第三步:编写自定义的403页面unauth.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>您没有相关访问权限!</h1>
</body>
</html>

 

第四步:访问测试

 

4、注解的使用

@Secured:

概述:

判断是否具有角色,另外需要注意的是这里匹配的字符串需要添加前缀“ROLE_“;

使用注解先要开启注解功能;

第一步:在启动类添加注解

@EnableGlobalMethodSecurity(securedEnabled=true)

第二步:在控制器TestController内方法上添加@Secured注解

package com.zibo.studyspringsecurity.controller;

import org.springframework.security.access.annotation.Secured;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("/hello")
    public String hello(){
        return "Hello Spring Security!";
    }

    @GetMapping("/index")
    public String index(){
        return "登录成功!";
    }

    // 这里我们新增一个方法,在这个方法上进行注解配置
    @GetMapping("/update")
    // @Secured("ROLE_sale") // 可以写一个
    @Secured({"ROLE_sale","ROLE_manage"}) // 可以写多个
    public String update(){
        return "您成功进行了更新!";
    }
}

第三步:在MyUserDetailsService中设置角色

第四步:启动项目,访问测试

访问http://localhost:8111/test/update

 

@PreAuthorize:

概述:

@PreAuthorize:注解适合进入方法前的权限验证, @PreAuthorize 可以将登录用户的 roles/permissions 参数传到方法中;

第一步:在启动类开启注解

@EnableGlobalMethodSecurity(prePostEnabled = true)

package com.zibo.studyspringsecurity;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

@SpringBootApplication
@EnableGlobalMethodSecurity(securedEnabled = true,prePostEnabled = true) // 开启security注解功能
public class StudyspringsecurityApplication {

    public static void main(String[] args) {
        SpringApplication.run(StudyspringsecurityApplication.class, args);
    }

}

第二步:在控制器TestController内方法上添加@PreAuthorize注解

第三步:在MyUserDetailsService中设置权限

第四步:重启项目,访问测试

访问http://localhost:8111/test/update

 

@PostAuthorize:

概述:

@PostAuthorize 注解使用并不多,在方法执行后再进行权限验证,适合验证带有返回值的权限

第一步:在启动类开启注解

@EnableGlobalMethodSecurity(prePostEnabled = true)

package com.zibo.studyspringsecurity;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

@SpringBootApplication
@EnableGlobalMethodSecurity(securedEnabled = true,prePostEnabled = true) // 开启security注解功能
public class StudyspringsecurityApplication {

    public static void main(String[] args) {
        SpringApplication.run(StudyspringsecurityApplication.class, args);
    }

}

第二步:在控制器TestController内方法上添加@PostAuthorize注解

第三步:在MyUserDetailsService中设置权限

第四步:重启项目,访问测试

访问http://localhost:8111/test/update

 

@PostFilter:

概述:

权限验证之后对数据进行过滤;

这个注解很不常用,也很简单,仅作用法说明,不再演示;

 

@PreFilter:

概述:

进入控制器之前对数据进行过滤;

这个注解很不常用,也很简单,仅作用法说明,不再演示;

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的Java开发框架,用于构建独立的、可扩展的、基于Spring的应用程序。Spring Security是一个为Java应用程序提供身份认证和授权的框架,它提供了许多安全功能,如用户认证、角色管理和资源访问控制。OAuth2是一种用于授权的开放标准,它允许应用程序通过第三方身份验证服务器来获取访问令牌,以便访问受保护的资源。 要集成Spring Security OAuth2到Spring Boot 3.0的Web API中,需要以下步骤: 1. 添加依赖:在项目的pom.xml文件中添加Spring Security OAuth2的依赖。例如,可以添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> ``` 2. 配置Spring Security:创建一个配置类,扩展`WebSecurityConfigurerAdapter`,并重写`configure`方法来配置Spring Security。你可以定义用户认证方式和角色管理等配置。 3. 配置OAuth2:创建一个配置类,扩展`WebSecurityConfigurerAdapter`,并重写`configure`方法。在方法中配置OAuth2的相关信息,如认证服务器URL、客户端ID、客户端密码等。 4. 创建资源服务器:创建一个类,注解为`@RestController`,用于提供Web API接口。在方法上使用`@PreAuthorize`注解定义接口的访问权限。 通过以上步骤,你可以将Spring Boot 3.0的Web API和Spring Security OAuth2集成起来。这样,你的应用程序将具有身份认证、角色管理和资源访问控制的功能,并可以使用OAuth2来授权访问受保护的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值