springSecurity学习之springSecurity注解使用

springSecurity注解使用

在使用springboot的时候,大家更习惯于使用注解来进行配置,那么springSecurity注解怎么使用呢

首先开启注解

@EnableGlobalMethodSecurity(// Spring Security 开启注解
		securedEnabled=true, // 开启@Secured注解,会创建切点,代理@Secured注解的方法
		prePostEnabled = true // 开启@PreAuthorize和@PostAuthorize注解
)

@Secured

用户具有哪些角色可以访问,注意要有ROLE_前缀

@Secured({"ROLE_student","ROLE_admin"})  // 用户具有哪些角色可以访问,注意要有ROLE_前缀
public String test(){
    System.out.println("secured");
    return "test";
}

@PreAuthorize

方法进入前进行校验

@PreAuthorize("hasAuthority('admin')")  // 方法进入前进行校验
public String test(){
    System.out.println("preAuthorize");
    return "test";
}

@PostAuthorize

方法结束后进行校验,可以正常执行,但是返回值需要进行权限校验

@PostAuthorize("hasAuthority('admin')")  // 方法结束后进行校验,可以正常执行,但是返回值需要进行权限校验
    public String test(){
    System.out.println("preAuthorize");
    return "test";
}

@PreFilter

允许方法调用,但是在进去方法前先过滤输入值

@PostFilter

允许方法调用,但是会过滤方法的结果

https://zhhll.icu/2021/框架/springSecurity/4.springSecurity注解使用/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Security 是一个基于 Spring 框架的安全框架,可以轻松地实现身份认证和授权等安全功能。 Spring Security 提供了一些注解,用于在应用中标注安全相关的信息,例如: - @Secured:用于标注方法或类,表示该方法或类需要特定的权限才能被访问。 - @PreAuthorize:用于标注方法或类,表示该方法或类需要满足指定的条件才能被访问。 - @PostAuthorize:用于标注方法,表示该方法需要在执行后满足指定的条件才能返回结果。 - @RolesAllowed:用于标注方法或类,表示该方法或类需要特定的角色才能被访问。 - @AuthenticationPrincipal:用于标注方法的参数,表示该参数需要获取当前身份认证用户的信息。 使用这些注解可以非常方便地实现应用的安全控制,例如: ```java @RestController public class UserController { @Autowired private UserService userService; @Secured("ROLE_ADMIN") @GetMapping("/users") public List<User> getUsers() { return userService.getUsers(); } @PreAuthorize("hasRole('ADMIN') or hasRole('USER')") @GetMapping("/users/{id}") public User getUserById(@PathVariable("id") Long id) { return userService.getUserById(id); } @PostAuthorize("returnObject.username == authentication.principal.username") @PutMapping("/users/{id}") public User updateUser(@PathVariable("id") Long id, @RequestBody User user) { return userService.updateUser(id, user); } @RolesAllowed({"ADMIN", "USER"}) @DeleteMapping("/users/{id}") public void deleteUser(@PathVariable("id") Long id) { userService.deleteUser(id); } @GetMapping("/me") public User getMe(@AuthenticationPrincipal UserDetails userDetails) { return userService.getUserByUsername(userDetails.getUsername()); } } ``` 在上述代码中,我们使用Spring Security 提供的各种注解,实现了对用户资源的安全控制。例如: - getUsers 方法需要 ROLE_ADMIN 权限才能访问。 - getUserById 方法需要 ADMIN 或 USER 角色才能访问。 - updateUser 方法执行后需要满足返回对象的 username 属性等于当前用户的用户名。 - deleteUser 方法需要 ADMIN 或 USER 角色才能访问。 - getMe 方法获取当前用户的信息,使用了 @AuthenticationPrincipal 注解获取了当前身份认证用户的信息。 需要注意的是,使用注解时需要启用 Spring Security 的方法级别安全控制,即需要在 WebSecurityConfigurerAdapter 中配置如下内容: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .anyRequest().authenticated() // 其他所有请求均需要身份认证 .and() .httpBasic(); // 使用 HTTP Basic 认证方式 } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 配置用户信息和密码编码器 auth.inMemoryAuthentication() .withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN") .and() .withUser("user").password(passwordEncoder().encode("user")).roles("USER"); } @Bean public PasswordEncoder passwordEncoder() { // 选择密码编码器 return new BCryptPasswordEncoder(); } } ``` 在上述代码中,我们配置了使用 HTTP Basic 认证方式,配置了用户信息和密码编码器,启用了方法级别安全控制。这样,我们就可以使用注解来实现应用的安全控制了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾光师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值