除了配置类,在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 "查询员工";
}
测试
加’ROLE_修改前缀后
@Secured("ROLE_/salary/find")
@GetMapping("/salary/find")
public String findSalary(){
return "查询工资";
}
修改后测试
@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 "查询员工";
}