1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 手放开 李圣杰
  4. 4 迷人的危险3(翻自 dance flow) FAFA
  5. 5 山楂树之恋 程佳佳
  6. 6 summertime cinnamons / evening cinema
  7. 7 不谓侠(Cover 萧忆情Alex) CRITTY
  8. 8 神武醉相思(翻自 优我女团) 双笙
  9. 9 空山新雨后 音阙诗听 / 锦零
  10. 10 Wonderful U (Demo Version) AGA
  11. 11 广寒宫 丸子呦
  12. 12 陪我看日出 回音哥
  13. 13 春夏秋冬的你 王宇良
  14. 14 世界が终わるまでは… WANDS
  15. 15 多想在平庸的生活拥抱你 隔壁老樊
  16. 16 千禧 徐秉龙
  17. 17 我的一个道姑朋友 双笙
  18. 18 大鱼  (Cover 周深) 双笙
  19. 19 霜雪千年(Cover 洛天依 / 乐正绫) 双笙 / 封茗囧菌
  20. 20 云烟成雨(翻自 房东的猫) 周玥
  21. 21 情深深雨濛濛 杨胖雨
  22. 22 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  23. 23 斑马斑马 房东的猫
  24. 24 See You Again Wiz Khalifa / Charlie Puth
  25. 25 Faded Alan Walker / Iselin Solheim
  26. 26 Natural J.Fla
  27. 27 New Soul Vox Angeli
  28. 28 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  29. 29 像鱼 王贰浪
  30. 30 Bye Bye Bye Lovestoned
  31. 31 Blame You 眠 / Lopu$
  32. 32 Believer J.Fla
  33. 33 书信 戴羽彤
  34. 34 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  35. 35 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  36. 36 慢慢喜欢你 LIve版(翻自 莫文蔚) 戴羽彤
  37. 37 病变(翻自 cubi) 戴羽彤
  38. 38 那女孩对我说 (完整版) Uu
  39. 39 绿色 陈雪凝
  40. 40 月牙湾 LIve版(翻自 F.I.R.) 戴羽彤
夜空中最亮的星(翻自 逃跑计划) - 戴羽彤
00:00 / 04:10

夜空中最亮的星 能否听清

那仰望的人 心底的孤独和叹息

夜空中最亮的星 能否记起

那曾与我同行 消失在风里的身影

我祈祷拥有一颗透明的心灵

和会流泪的眼睛

给我再去相信的勇气

越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请指引我靠近你

夜空中最亮的星 是否知道

那曾与我同行的身影 如今在哪里

夜空中最亮的星 是否在意

是等太阳先升起 还是意外先来临

我宁愿所有痛苦都留在心底

也不愿忘记你的眼睛

哦 给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行 哒~

我祈祷拥有一颗透明的心灵

和会流泪的眼睛 哦

给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行

spring-boot启用security组件 · 中

spring-boot启用security组件 · 中

前言

昨天我们分享了spring-boot启用security组件的一些基础知识,演示了security的基本配置和简单用法,虽然也可以应用于实际开发,但还是过于简单,并不能真正发挥sercurity的作用,所以今天我们还要继续深挖security的其他配置和用法。目前,我计划花三天时间分享security相关知识点,不过具体还是要看实际情况。

好了,话不多说,我们直接开整。

security

用户名及密码配置补充

开始之前,我们先补充一个security组件密码和用户名配置的知识点,昨天我们分享了通过配置类整合我们自己的用户数据,在翻看spring boot相关书籍的时候,我发现它还有另外一种方式配置用户名和密码——配置文件,配置方式也很简单,就是在我们的application.properties文件中添加如下配置:

spring.security.user.name=myuser
spring.security.user.password=l23456

但是,需要把我们昨天加的配置类和service先注释掉,否则会有冲突。在我实际测试过程中,我发现只要实现了UserDetailsService类,加上@service注解(不需要配置类),其实已经相当于自定义了security组件的用户数据,只是后台会报错误:

所以我们还是需要通过配置类设定加密器,关于用户名和密码配置,还有另外一种方式,也是基于配置类的:

protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("syske").password("123456");
        }

这种方式和配置文件的方式差不多一样,但是配置文件是支持多用户配置的:

auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                .withUser("syske").password("123456").and()
                .withUser("admin").password("admin");

配置登录页面和资源权限控制

下面我们分享security的另一个配置组件,这个组件的作用主要是配置页面和用户可访问的资源,我们可以在这个方法下设置用户登录页。

默认配置如下:

protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated().and()
                .formLogin().and()
                .httpBasic();
    }

我们可以根据自己的需要修改配置:

http.authorizeRequests()
                //限定 ” /user/welcome ”请求赋予角色 ROLE_USER 或者 ROLE_ADMIN
                .antMatchers("/user/welcome").hasAnyRole("USER", "ADMIN")
                // 限定 ” /admin/ ”下所有请求权限赋予角色 ROLE_ADMIN
                .antMatchers("/admin/**").hasAnyAuthority("ROLE_ADMIN")
                // 其他路径允许签名后访问
                .anyRequest().permitAll()
                // 对于没有配置权限的其他请求允许匿名访问
                .and().anonymous()
                // 使用spring security 默认的登录页面
                .and().formLogin()
                // 启动 HTTP 基础验证
                .and().httpBasic();

这里我们简单介绍下,authorizeRequests()方法的作用是创建权限配置对象,并把配置对象注入spring boot

其他的配置操作都是基于这个配置对象展开的。

  • antMatchers的作用是添加地址匹配规则,支持正则表达式;

  • hasAnyRole一般是和antMatchers成对出现的,它的作用是设定antMatchers的访问权限,只要具有指定权限,即可访问前面配置的访问规则;

  • hasAnyAuthorityhasAnyRole类似,它也和antMatchers成对出现,所不同的是hasAnyAuthority要指定的是具体的权限

  • and 方法 ,它是连接词,表示可以重新加入新的权限验证规则,就相当于把配置对象返回了

  • anyRequest表示上面限定的所有请求,即antMatchers("/user/welcome").hasAnyRole("USER", "ADMIN")这样的配置

  • permitAll 表示对请求(具体看请求类别)无条件允许访问

  • anonymous表示对请求(具体看请求类别)允许匿名访问

  • formLogin表示启用security默认登录页,我们也可以设定自己的登录页和登录成功的页面

  • httpBasic表示启用浏览器的http基础验证

更多配置方法可以参考这张图片:

测试

我们定义几个controller测试一下:

@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("security")
    public Object testSecurity(String name) {
        return "hello, " + name;

    }
}

管理controller

@RestController
@RequestMapping("/admin")
public class AdminController {
    @GetMapping("security")
    public Object testSecurity(String name) {
        return "hello, admin -" + name;

    }
}

普通用户controller

@RestController
@RequestMapping("/user")
public class UserController {

        @GetMapping("security")
        public Object testSecurity(String name) {
            return "hello, user -" + name;

        }

    @PostMapping("welcome")
    public Object welcome(String name) {
        return "welcome, user -" + name;

    }
}

然后我们把获取用户的数据进行了修改,将用户进行了伪代码处理:

private static Map<String, UserDetails> userDetailsMap = Maps.newHashMap();

    static {
        userDetailsMap.put("admin", new UserInfo("admin", encrypt("admin"), "ADMIN"));
        userDetailsMap.put("user", new UserInfo("user", encrypt("123456"), "USER"));
        userDetailsMap.put("test", new UserInfo("test", encrypt("test"), "TEST"));
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        if (userDetailsMap.containsKey(username)) {
            return userDetailsMap.get(username);
        } else {
            throw new UsernameNotFoundException("用户不存在");
        }
    }
private static String encrypt(String password) {
        return new BCryptPasswordEncoder().encode(password);
    }

需要注意的是,.successForwardUrl("/user/welcome")的地址只能是post接口,如果是get接口的话,登录成功后会报错:

总结

今天我们主要分享了security组件的另一个配置方法 —— configure(HttpSecurity http),演示了一些简单的配置,由于时间的问题,能分享的内容确实也比较有限,而且spring boot单个组件内容又比较多,所以目前还找不到更合适的分享方式,不过各位小伙伴也不用太着急,组件完成后我会做一个系统的demo将所有知识点串起来。好了,今天的内容就到这里吧,今天很忙忙,所以内容更新的也有点晚了。

posted @ 2021-07-26 14:29  云中志  阅读(219)  评论(0编辑  收藏  举报