Spring Security--基于注解访问控制 @Secured&@PreAuthorize

    基于注解的访问控制

      在 Spring Security 中提供了一些访问控制的注解。这些注解都是默是都不可用的,需要通过 @EnableGlobalMethodSecurity 进行开启后使用.如果设置的条件允许,程序正常执行。如果不允许会报 500.
在这里插入图片描述
      这些注解可以写到 Service 接口或方法上上也可以写到 Controller 或 Controller 的方法上.通常情况下都是写在控制器方法上的,控制接口 URL 是否允许被访问。

    1 @Secured

      @Secured 是专门用于判断是否具有角色的。能写在方法或类上。 参数要以 ROLE_开头.

     启动类代码

@SpringBootApplication
@EnableGlobalMethodSecurity(securedEnabled = true)
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class,args);
    }
}

     控制器代码

    @Secured("ROLE_abc")
    @RequestMapping("/showdemo")
    public String demo(){
        return "redirect:/demo.html";
    }

     配置类代码

  http.authorizeRequests()
                .antMatchers("/login.html").permitAll() // login.html 这个请求不需要认证
                .antMatchers("/fail.html").permitAll()  // fail.html 这个请求不需要认证
                .anyRequest().authenticated(); // 所有的请求都必须被认证

    2 @PreAuthorize/@PostAuthorize

      @PreAuthorize 和@PostAuthorize 都是方法或类级别注解。
Spring Security--基于注解访问控制 @Secured&@PreAuthorize_第1张图片
      @PreAuthorize 表示访问方法或类在执行之前先判断权限,大多情况下都是使用这个注解,注解的参数和access()方法参数取值相同,都是权限表达式。

      @PostAuthorize 表示方法或类执行结束后判断权限,此注解很少被使用到。

    2.1@PreAuthorize实现步骤

      在启动类中开启@PreAuthorize 注解。

@SpringBootApplication
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class,args);
    }
}

      添加@PreAuthorize
      在控制器方法上添加@PreAuthorize,参数可以是任何 access()支持的表达式

    @PreAuthorize("hasRole('abc')")
    @RequestMapping("/showdemo")
    public String demo(){
        return "redirect:/demo.html";
    }

你可能感兴趣的:(Java,SpringSecurity)