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

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

一.开启方式

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

二.常用注解

1.@Secured

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

1.1实现步骤

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

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

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

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

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

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注解

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

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

@PreAuthorize("hasRole('abc')")
@RequestMapping("/toMain")
public String toMain(){
   
    return "redirect:/main.html";
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2351.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sigaction 使用

    sigaction 使用函数sigaction原型:intsigaction(intsigno,conststructsigaction*restrictact,structsigaction*restrictoact);@signo信号编号@act要注册的信号动作@oact原信号动作参数structsigactionstructsigaction{

    2022年5月26日
    44
  • js漂浮广告代码_JavaScript上传文件代码

    js漂浮广告代码_JavaScript上传文件代码//浮动广告代码varx=50,y=60; //设置元素在浏览器窗口中的初始位置varxin=true,yin=true;//设置xin、yin用于判断元素是否在窗口范围内varstep=1; //可设置每次移动几像素varobj=document.getElementById(“Ad”);//通过id获取div元素functionfloatAd(){varL=T=0;varR=document.body.clientWidth-obj.off

    2022年9月20日
    0
  • gradient boosting classifier_boosting算法有哪些

    gradient boosting classifier_boosting算法有哪些最近项目中涉及基于GradientBoostingRegression算法拟合时间序列曲线的内容,利用python机器学习包 scikit-learn中的GradientBoosti

    2022年8月3日
    4
  • 解决Pycharm下导入TensorFlow失败的问题[通俗易懂]

    解决Pycharm下导入TensorFlow失败的问题[通俗易懂]一般情况下通过:File—Settings—Project:工程名字—ProjectInterpreter—右上角加号–上面窗口输入Tensorflow—左下角的InstallPackage就可以成功导入。如果导入失败,可能是你的pip版本不够用了,按照上述方法,先把pip更新一下,在去导入TensorFlow可以了。…

    2022年8月26日
    2
  • 漫步微积分三十四——体积计算:圆柱壳法

    漫步微积分三十四——体积计算:圆柱壳法还有一种去体积的方法,往往它比上篇文章的方法更加方便。为了理解这种方法,考虑图1左边所示的区域,也就是,第一象限数轴和所示示曲线y=f(x)y=f(x)围成的区域。如果这个区域绕xx轴旋转,那么图中的垂直窄带生成一个圆盘,我们能够从x=0x=0到x=bx=b区间上积分这些圆盘的体积得到总体积。当然,这是上篇文章中描述的圆盘法。然而,如果区域绕yy轴旋转,就像图中间的那样,那么我们获得完全不同的物体,

    2022年6月7日
    49
  • mysql中有execute_jdbc连接mysql数据库

    mysql中有execute_jdbc连接mysql数据库最近在补基础知识,刚好补到C#中对数据库操作的一些技术,今天学习了ExecuteNonQuery的东西,看自己项目维护项目的代码和网上资料查询,基本上搞懂了ExecuteNonQuery的用法,小小的做个总结,供以后查阅。ExecuteNonQuery方法主要用来更新数据,当然也可以用来执行目标操作(例如查询数据库的结构或者创建诸如表等的数据库对象)。通常用它来执行insert、update、de…

    2022年9月12日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号