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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • easyOCR_功能测试包括

    easyOCR_功能测试包括EasyOCR是一个用python编写的OCR三方库。git地址为:https://github.com/JaidedAI/EasyOCR。由于笔者从事的是java开发,对python并不熟悉,所以实际上是从python开发环境安装开始的。类似于jdk,python开发也依赖于python环境,而因为python各版本之间差异很大,很多时候不同组件依赖的是不同的python版本,甚至小版本之间也存在兼容性问题,所以网上推荐使用的是Anaconda环境管理软件。Anaconda可以隔离出多个pytho

    2022年11月1日
  • C# FileStream StreamWrite追加到文本文件末尾

    C# FileStream StreamWrite追加到文本文件末尾

    2021年8月24日
  • @RequestBody出现请求415问题

    @RequestBody出现请求415问题首先之前也遇到过这样的问题,但是稀里糊涂的最后虽然bug修复了,但是不知道是啥原因,今天又遇到了同样的问题。问题:在前端向后台发送一个json对象(字符串),后端用@RequestBody匹配接受的时候就会出现415,如果不用@RequestBody,那么前端发送来的数据是不能被正确解析成对象里的属性的。因为用公司的框架写项目的时候,也遇见了这个问题。请教了学长,学长让我用公司自己封装的p…

    2022年6月3日
  • 在非XP操作系统下模拟的LockWorkStation函数

    在非XP操作系统下模拟的LockWorkStation函数在非XP操作系统下模拟的LockWorkStation函数文章作者:Delphiscn信息来源:邪恶八进制信息安全团队程序功能:可在非XP的操作系统下所定计算机(为了程序的界面美观,我使用了SUIPack控件,有兴趣的朋友可以去Delphibox.com下载)*********************************************************…

    2022年7月21日
  • Mysql8.0安装步骤「建议收藏」

    第一步:下载安装包MYSQL官方下载地址:官方下载这里第一项是在线安装,第二项是离线包安装,我选择的是第二项(不用管你电脑是多少位的操作系统),因为:Note:MySQLInstalleris32bit,butwillinstallboth32bitand64bitbinaries.不用注册、登录,直接选择左下按钮下载:Nothanks,ju…

    2022年4月14日
  • char转换成string java_int类型转换成char类型

    char转换成string java_int类型转换成char类型类型转换:char转int源码packagecom.onlydemo.javalang;/***类型转换:char转int**1.char-‘0’将char转int*2.Character.getNumericValue(charch)将char转int**@authorwww.only-demo.com**/classCha…

    2022年10月2日

发表回复

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

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