天天看点

Spring Security授权_注解设置访问控制

Spring Security授权_注解设置访问控制

除了配置类,在SpringSecurity中提供了一些访问控制的注解。这些注解默认都是不可用的,需要开启后使用。

@Secured

该注解是基于角色的权限控制,要求UserDetails中的权限名必须以ROLE_ 开头。

在配置类开启注解使用

@SpringBootApplication
@MapperScan("com.neu.mapper")
@Slf4j
@EnableGlobalMethodSecurity(securedEnabled = true)
public class ApplicationMain {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationMain.class,args);
        log.info("服务启动成功");
    }
}      

在控制器方法上添加注解

@Secured("/reportform/find")
    @GetMapping("/reportform/find")
    public String findReportform(){
        return "查询报表";
    }
    @Secured("/salary/find")
    @GetMapping("/salary/find")
    public String findSalary(){
        return "查询工资";
    }
    @Secured("/staff/find")
    @GetMapping("/staff/find")
    public String findTax(){
        return "查询员工";
    }      

测试

Spring Security授权_注解设置访问控制

加’ROLE_修改前缀后

@Secured("ROLE_/salary/find")
    @GetMapping("/salary/find")
    public String findSalary(){
        return "查询工资";
    }      
Spring Security授权_注解设置访问控制

修改后测试

Spring Security授权_注解设置访问控制

@PreAuthorize

该注解可以在方法执行前判断用户是否具有权限

在配置类开启注解使用

@SpringBootApplication
@MapperScan("com.neu.mapper")
@Slf4j
//@EnableGlobalMethodSecurity(securedEnabled = true)
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class ApplicationMain {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationMain.class,args);
        log.info("服务启动成功");
    }
}      

在控制器方法上添加注解

@PreAuthorize("hasAuthority('/reportform/find')")
    @GetMapping("/reportform/find")
    public String findReportform(){
        return "查询报表";
    }
    @PreAuthorize("hasAuthority('/salary/find')")
    @GetMapping("/salary/find")
    public String findSalary(){
        return "查询工资";
    }
    @PreAuthorize("hasAuthority('/staff/find')")
    @GetMapping("/staff/find")
    public String findTax(){
        return "查询员工";
    }      

数据库里的权限

测试