Spring Security中使用注解进行用户授权
程序员文章站
2024-03-19 16:03:16
...
@Secured
功能:判断是否具有角色,另外需要注意的是这里匹配的字符串需要添加前缀“ROLE_”。
示例:
在Spring Security中的用户授权的基础上进行修改。
使用@EnableGlobalMethodSecurity(securedEnabled=true)开启该注解功能。
package com.rixin.springsecuritydemo2;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
@MapperScan("com.rixin.springsecuritydemo2.mapper")
@EnableGlobalMethodSecurity(securedEnabled=true)
@SpringBootApplication
public class Springsecuritydemo2Application {
public static void main(String[] args) {
SpringApplication.run(Springsecuritydemo2Application.class, args);
}
}
在控制器方法上添加注解@Secured。
package com.rixin.springsecuritydemo2.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 add() {
return "hello security";
}
@GetMapping("index")
public String index() {
return "hello index";
}
@GetMapping("update")
@Secured({"ROLE_sale","ROLE_manager"})
public String update() {
return "hello update";
}
}
@PreAuthorize
功能:注解适合进入方法前的权限验证,@PreAuthorize可以将登录用户的roles/permissions参数传到方法中。
示例:
先开启注解功能:
package com.rixin.springsecuritydemo2;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
@MapperScan("com.rixin.springsecuritydemo2.mapper")
@EnableGlobalMethodSecurity(securedEnabled=true,prePostEnabled = true)
@SpringBootApplication
public class Springsecuritydemo2Application {
public static void main(String[] args) {
SpringApplication.run(Springsecuritydemo2Application.class, args);
}
}
控制器中加入注解:
@GetMapping("update")
//@Secured({"ROLE_sale","ROLE_manager"})
@PreAuthorize("hasAnyAuthority('manager')")
public String update() {
return "hello update";
}
@PostAuthorize
功能:在方法执行之后再进行权限验证,适合验证带有返回值的权限。
用法与上面相同。
@PostFilter
功能:权限验证之后对返回的数据进行过滤。
示例:
控制器中加入以下代码
@GetMapping("getAll")
@PreAuthorize("hasAnyAuthority('manager')")
@PostFilter("filterObject.username == '44'")
public List<User> getAllUser() {
ArrayList<User> list = new ArrayList<>();
list.add(new User(1,"22","33"));
list.add(new User(2,"44","33"));
return list;
}
登录后页面显示:
[{"id":2,"username":"44","password":"33"}]
@PreFilter
功能:进入控制器之前对传入方法的数据进行过滤。
用法与上面相同。
上一篇: NVL函数的用法
下一篇: Spring Security实战案例