前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringSecurity(十三)—-基于注解的访问控制

SpringSecurity(十三)—-基于注解的访问控制

作者头像
全栈程序员站长
发布2021-04-07 10:15:58
8080
发布2021-04-07 10:15:58
举报
文章被收录于专栏:全栈程序员必看

一.开启方式

在Spring Security中提供了一些访问控制的注解。这些注解都是默认是都不可用的,需要在启动类中添加@EnableGlobalMethodSecurity注解进行开启。 如果不开启就使用注解会报500

二.常用注解

1.@Secured

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

1.1实现步骤

1)开启注解 在启动类(也可以在配置类等能够扫描的类上)上添加@EnableGlobalMethodSecurity(securedEnabled = true)

代码语言:javascript
复制
@SpringBootApplication
@EnableGlobalMethodSecurity(securedEnabled = true)
public class MyApp {
   
    public static void main(String [] args){
   
        SpringApplication.run(MyApp.class,args);
    }
}

2)在控制器方法上 添加@Secured注解

代码语言:javascript
复制
@Secured("ROLE_abc")
@RequestMapping("/toMain")
public String toMain(){
   
    return "redirect:/main.html";
}
代码语言:javascript
复制
    //表示必须同时拥有test和admin角色才可以访问
    @Secured("ROLE_test,RLOE_admin")
    @RequestMapping("/demo02")
    @ResponseBody
    public String demo02()
    {
   
        return "demo02";
    }

3)修改配置类 配置类中方法配置保留最基本的配置即可。

代码语言:javascript
复制
protected void configure(HttpSecurity http) throws Exception {
   
    // 表单认证
    http.formLogin()
            .loginProcessingUrl("/login")   //当发现/login时认为是登录,需要执行UserDetailsServiceImpl
            .successForwardUrl("/main")   //此处是post请求
            .loginPage("/login.html");

    // url 拦截
    http.authorizeRequests()
            .antMatchers("/login.html","/noauth.html").permitAll() //login.html不需要被认证
            .anyRequest().authenticated();//所有的请求都必须被认证。必须登录后才能访问。

    //关闭csrf防护
    http.csrf().disable();

}

2.@PreAuthorize和@PostAuthorize

@PreAuthorize和@PostAuthorize都是方法或类级别注解。 @PreAuthorize表示访问方法或类在执行之前先判断权限,大多情况下都是使用这个注解,注解的参数和access()方法参数取值相同,都是权限表达式。 @PostAuthorize表示方法或类执行结束后判断权限,此注解很少被使用到。

2.1实现步骤

1)开启注解 在启动类中开启@PreAuthrize注解

代码语言:javascript
复制
@SpringBootApplication
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MyApp {
   
    public static void main(String [] args){
   
        SpringApplication.run(MyApp.class,args);
    }
}

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

代码语言:javascript
复制
@PreAuthorize("hasRole('abc')")
@RequestMapping("/toMain")
public String toMain(){
   
    return "redirect:/main.html";
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年11月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.开启方式
  • 二.常用注解
    • 1.@Secured
      • 1.1实现步骤
    • 2.@PreAuthorize和@PostAuthorize
      • 2.1实现步骤
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档