SpringSecurity中的授权

摘要:
1、 定义所谓的授权意味着如果用户想要访问资源,我们需要检查该用户是否具有这样的权限。如果是,则允许访问。如果没有,则不允许访问。2、 准备测试用户(因为没有连接到数据库)1。通过wsException{auth.inMemoryA基于内存配置@Overrideprotectedvoid configure(AuthenticationManagerBuilderauth)测试用户

一.定义

  所谓的授权,就是用户如果要访问某一个资源,我们要去检查用户是否具备这样的权限,如果具备就允许访问,如果不具备,则不允许访问。

二.准备测试用户(由于没有连接数据库)

  1.基于内存配置测试用户

    

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
            .withUser("test1")   //用户名
            .password("123456")      //密码
       .roles("admin") //角色 .and() .withUser("test2") .password("123456") .roles("user"); }

   2.实现UserDetailService 接口  重写loadUserByUserNmae

    

public class SsoUserDetailsService implements UserDetailsService {

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException {
        return new User(username, passwordEncoder.encode("123456"), AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_USER"));
    }    
}

  3.还可以通过重写 WebSecurityConfigurerAdapter 中的 userDetailsService 方法来提供一个 UserDetailService 实例进而配置多个用户:

  

@Bean
protected UserDetailsService userDetailsService() {
    InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
    manager.createUser(User.withUsername("test1").password("123456").roles("admin").build());
    manager.createUser(User.withUsername("test2").password("123456").roles("user").build());
    return manager;
}

三.测试接口

  

@RestController
public class HelloController {
  //  /hello 是任何人都可以访问的接口
  @GetMapping("/hello") 

  public String hello() {
    return "hello";
    }
  // /admin/hello 是具有 admin 身份的人才能访问的接口
    @GetMapping("/admin/hello")
    public String admin() {
        return "admin";
    }
  

   // /user/hello 是具有user身份能访问的接口,但是user能访问的资源,admin都可以访问 (角色继承) @GetMapping(
"/user/hello") public String user() { return "user"; } }

    

四.配置

@Configuration
public class SsoSecurityConfig extends WebSecurityConfigurerAdapter {
   @Override
    protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/admin/**").hasRole("admin")    //如果请求路径满足 /admin/** 格式,则用户需要具备 admin 角色。
            .antMatchers("/user/**").hasRole("user")     //如果请求路径满足 /user/** 格式,则用户需要具备 user 角色
            .anyRequest().authenticated()               //剩余的其他格式的请求路径,只需要认证(登录)后就可以访问。
            .and() 
  }
}

    Ant 风格的路径匹配符

通配符含义
**匹配多层路径
*匹配一层路径
?匹配任意单个字符

五.角色继承

  定义:要实现所有 user 能够访问的资源,admin 都能够访问

  我们只需要在继承了WebSecurityConfigurerAdapter 类的类中添加如下代码来配置角色继承关系即可:

  

@Bean
RoleHierarchy roleHierarchy() {
    RoleHierarchyImpl hierarchy = new RoleHierarchyImpl();
    hierarchy.setHierarchy("ROLE_admin > ROLE_user");   //表示 ROLE_admin 自动具备 ROLE_user 的权限。
    return hierarchy;
}

  【】在配置时,需要给角色手动加上 ROLE_ 前缀

免责声明:文章转载自《SpringSecurity中的授权》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇TarJan 算法求解有向连通图强连通分量SpringMVC开发环境搭建-logback.xml配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

微信退款流程,以及在过程中遇见的错误和解决方式(php 语言)

官方下载demo  1:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1    开发步骤  :    https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3    退款结果通知:https://pay.weixin.q...

RT-Thread代码启动过程——以及 $Sub$ $main 与 $Super$ $main

【转】https://blog.csdn.net/yang1111111112/article/details/80913001 我们找到系统复位的地方,可以往下单步跟踪。 ①从系统初始化开始执行,将函数地址赋给R0寄存器,跳转到R0地址执行并返回此处(BLX是带链接的跳转,即带返回的跳转)。 ②将main函数地址给R0,将函数地址赋给R0,跳转到R0地址...

jmeter压力测试的简单实例+badboy脚本录制(一个简单的网页用户登录测试的结果)

JMeter的安装:在网上下载,在下载后的zip解压后,在bin目录下找到JMeter.bat文件,双击就可以运行JMeter.  http://jmeter.apache.org/ 在使用jmeter前要先下载jdk包,配置java环境。(参见Java环境配置教程) 配置完成后在运行窗口检查一下java -version确定java环境配置完成。 一、利...

adb logcat的命令行开启和关闭

Windows上: 通过cmd: 开启:adb logcat > 文件完整路径 关闭:taskkill /F /IM adb.exe Linux上: 开启:adb logcat > 文件路径 关闭:kill -9 $(ps aux | grep "adb logcat" | sed -n 1p | awk '{print $2}')...

【转载】Visual Studio2017如何打包发布Winform窗体程序

在用C#语言编写好Winform窗体程序后,最后一步的操作是将设计好的Winform程序代码进行打包以及发布成安装包。在Visual Studio2017开发工具中,打包发布WinForm程序是比较简单的,只需要简单的几部操作即可完成打包发布操作,此文简要介绍Visual Studio2017打包发布WinForm程序的流程。 (1)首先选中需要打包发布的...

activemq 安装配置二

管理后台地址http://localhost:8161/admin 或 http://127.0.0.1:8161/admin 默认用户名密码admin admin,端口默认是8161,且服务采用的是服务器,所以我们进入到conf/jetty.xml 一. 放开本地访问限制 将host由127.0.0.1 变更为0.0.0.0 , 放开非本地访问限制...