认证和授权学习3:springsecurity实现方法级的权限控制

认证和授权学习3:springsecurity实现方法级的权限控制

本文使用的springboot版本是2.1.3.RELEASE

上一篇:springsecurity快速入门

本文记录下在springsecurity中如何对方法进行权限控制

前边用http.authorizeRequests()实现了对web资源的保护,如果要实现基于方法的权限控制,springsecurity也提供了两类注解来实现。@PreAuthorize,@Secured

一、@Secured 注解实现方法授权

1.1开启方法授权

在安全配置类上加上注解@EnableGlobalMethodSecurity开启方法权限控制

@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)//开启方法权限控制
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    //用户配置
    //安全配置
}

1.2 使用@Secured 注解控制方法权限

在需要进行权限控制的方法上加注解,类或接口中都可以

public interface ResourceService {

    //这个方法允许匿名访问
    @Secured("IS_AUTHENTICATED_ANONYMOUSLY")
    String res1();

    //这个方法要有p1角色才能访问
    
    @Secured("ROLE_P1")
    String res2();

    //这个方法要有P1或p2角色才能访问
    @Secured({"ROLE_P1","ROLE_P2"})
    String res3();
}

这样这三个方法就受权限控制了。

二、PreAuthorize 注解控制权限

2.1 开启方法授权

在安全配置类上加注解

@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true,prePostEnabled = true)//开启方法权限控制
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    //用户配置
    //安全配置
}

2.2 在要控制的方法上使用注解


public interface ResourceService {
    //匿名访问
    @PreAuthorize("isAnonymous()")
    String res4();

    //拥有角色1,角色名要带ROLE_前缀
    @PreAuthorize("hasRole('ROLE_P1')")
    String res5();
}

三、总结

以上示例了在spring security中如何进行方法级的权限控制。分为两步,第一,在配置类上开启方法权限控制

第二步,在对应的方法上加上控制注解指定权限。

完整的示例工程: 示例工程

原文地址:https://www.cnblogs.com/chengxuxiaoyuan/p/13973495.html