77百科网
当前位置: 首页 生活百科

spring security 配置详解(SpringSecurity快速入门)

时间:2023-06-15 作者: 小编 阅读量: 1 栏目名: 生活百科

在配置文件中使用#如果在代码里配置了用户信息这个就不能使用了呢?spring.security.user.name=adminspring.security.user.password=123456spring.security.user.roles=ADMIN启动项目,localhost:8080/login进入页面,需要输入用户名和密码。

介绍如何使用springboot中Spring-security引入依赖包

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

启动项目,localhost:8080/login 进入页面,需要输入用户名和密码。用户名为:user,密码在控制台输出,去控制台查找。

在配置文件中使用

#如果在代码里配置了用户信息 这个就不能使用了呢?spring.security.user.name=adminspring.security.user.password=123456spring.security.user.roles=ADMIN

启动项目,localhost:8080/login 进入页面,需要输入用户名和密码。用户名为:admin,密码:123456

在内存中使用
  • (需要将配置文件里配置的注释掉)

@Configuration@EnableWebSecurity//启用Spring security@EnableGlobalMethodSecurity(prePostEnabled = true)//拦截@preAuthrize注解的配置public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredprivate PasswordEncoder encoder;//这个东西很重要@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {/** 基于内存的方式构建两个账户* */auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("admin").password(new BCryptPasswordEncoder().encode("123")).roles("admin");//两个构建账户的方式 看着不同 其实是一样的啊auth.inMemoryAuthentication().passwordEncoder(encoder).withUser("user").password(encoder.encode("123")).roles("normal");}}

在内存中定义认证用户,需要自己写一个类WebSecurityConfig实现WebSecurityConfigurerAdapter类,重写其中的方法;

需要注意的是:在设置密码的时候,需要是加密后的密码,且要符合加密类型;

类上面的注解 @EnableGlobalMethodSecurity开启后针对不同的方法,会验证其身份角色;

@RestControllerpublicclassHelloController{@GetMapping(value ="/hello")publicStringhello(){return"HelloWorld";}@GetMapping(value ="/helloAdmin")@PreAuthorize("hasAnyRole('admin')")publicStringhelloAdmin(){return"HelloWorld,helloAdmin";}@PreAuthorize("hasAnyRole('normal','admin')")@GetMapping(value ="/helloUser")publicStringhelloUser(){return"HelloWorld,helloUser";}}

验证:

进入localhost:8080/login,登录 admin用户,再访问:localhost:8080/helloAdmin ,localhost:8080/helloUser

均可访问成功;

重新登入 user用户,再访问localhost:8080/helloAdmin ,localhost:8080/helloUser,发现访问localhost:8080/helloAdmin时报错,访问被禁止

使用数据库1 添加依赖,使具备查询数据库的能

<!-- 数据库连接--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!--数据库--><dependency><groupId>org.hsqldb</groupId><artifactId>hsqldb</artifactId><scope>runtime</scope></dependency>

hsqldb内存数据库,jpa 连接数据库

2 开发一个根据用户名查询用户信息的接口

publicinterfaceUserInfoService{publicUserInfofindByUsername(String username);}

3 编写一个类CustomUserDetailsService实现接口UserDetailsService 重写loadUserByUsername方法

@ComponentpublicclassCustomUserDetailsServiceimplementsUserDetailsService{@AutowiredprivateUserInfoService service;@AutowiredprivatePasswordEncoder encoder;@OverridepublicUserDetailsloadUserByUsername(String s)throwsUsernameNotFoundException{UserInfo userInfo = service.findByUsername(s);if(userInfo ==null) {thrownewUsernameNotFoundException("not found : "s);}List<GrantedAuthority> authorities =newArrayList<>();authorities.add(newSimpleGrantedAuthority("ROLE_"userInfo.getRole().name()));User userDetails =newUser(userInfo.getUsername(), encoder.encode(userInfo.getPassword()), authorities);returnuserDetails;}}

1 此方法返回的是一个UserDetails 实例,构造方法中有3个参数,分别为 用户名,密码,和权限列表;

2 次用用到了查询用户信息的接口

注意:此处的密码需要加密;权限需要前面拼接ROLE(权限如果提前预存在数据库已经拼接过,此处写法会不同)

4 在数据库添加用户

@ServicepublicclassDataInit{@AutowiredprivateUserInfoRepository userInfoRepository;@PostConstructpublicvoiddataInit(){UserInfo user =newUserInfo();user.setUsername("user");user.setPassword("123");user.setRole(UserInfo.Role.normal);userInfoRepository.save(user);UserInfo admin =newUserInfo();admin.setUsername("admin");admin.setPassword("123");admin.setRole(UserInfo.Role.admin);userInfoRepository.save(admin);}}

@ServicepublicclassDataInit{@AutowiredprivateUserInfoRepository userInfoRepository;@PostConstructpublicvoiddataInit(){UserInfo user =newUserInfo();user.setUsername("user");user.setPassword("123");user.setRole(UserInfo.Role.normal);userInfoRepository.save(user);UserInfo admin =newUserInfo();admin.setUsername("admin");admin.setPassword("123");admin.setRole(UserInfo.Role.admin);userInfoRepository.save(admin);}}

验证:

进入localhost:8080/login,登录 admin用户,再访问:localhost:8080/helloAdmin ,localhost:8080/helloUser

均可访问成功;

重新登入 user用户,再访问localhost:8080/helloAdmin ,localhost:8080/helloUser,发现访问localhost:8080/helloAdmin时报错,访问被禁止

源代码:https://github.com/liyiruo/bili-spring-security


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:

https://blog.csdn.net/l23456789o/article/details/107853160

,
    推荐阅读
  • 小白装机的常见问题(开机引导的正确打开方式)

    前面给大家介绍了如何给机器装系统,今天给大家介绍新机器如何进入桌面。当我们收到新机器时,首先需要连接电源,因为有时候电脑电池电量不足,会导致在激活系统过程中,电脑自动关机,从而进不去系统的尴尬。

  • 奔腾电压力锅使用说明(奔腾电压力锅使用方法图解)

    对消费者来说电压力锅既有安全保障,又能做出喷香美味的饭菜。具有烹饪状态显示,美味一目了然,更直观。24小时超长预约功能,出门设置预约按键,下班直接吃饭。烹饪结束,自动进入保温状态,无需专人看管。其中装有易溶金属片,当锅内压力达到2500克时,,它就会自动溶化,放出锅内的气体,减轻锅内的压力,确保安全。这样的锅作用更为安全。

  • 已婚女人和情人分手会难过吗(和相处多年的情人分手)

    女人是敏感的,真情长情与虚情假意还是分得清楚的!由于得不到全社会的认可,使得陷入这种情感的男女只得在黑暗的角落里偷偷享受甜蜜与温情。这种偷来的快乐自然是更加的令人心动,但带来的隐患及危害,可能也远超当事人的预估与承担的范围。有勇气放弃不幸婚姻的男女,他们永远不会陷入这样一种困境;而陷入这种困境的男女,往往受限于现实种种,无法放弃婚姻。

  • 哈弗车的发动机变速箱可靠吗(哈弗十佳发动机变速箱)

    哈弗有两个发动机生产基地,即哈弗徐水工厂和哈弗天津工厂。哈弗使用的1.5T发动机此前被很多车主称为中国最强的1.5T发动机。发动机最大功率和扭矩分别为124kw和285nm,在1400rpm时可达到最大扭矩。总的来说,该系列发动机将成为哈弗未来的主力车型,也有可能为高端车型推出大功率版本的发动机。哈弗H6搭载的自主研发的1.5GDIT发动机,在“中国心”年度十佳发动机评选活动中荣获“十佳发动机”称号。

  • 贵阳摘桃子的地方推荐(贵阳哪里可以摘桃子)

    交通攻略:自驾:贵阳—北京路—渔安隧道—北京东路—县道128—终点公交:乘坐273路公交车到终点站下车即可二、乌当区下坝乡岩山村这里海拔较低,土壤较适合种植桃树,种出来的桃子不但甜度较高,而且口感也是极好的。

  • 宝宝尿不湿多长时间换一次 宝宝的尿不湿多长时间换一次

    尿不湿为宝宝提供了大的帮助,可以让他们玩耍和睡觉更加安心。宝宝尿不湿多长时间换一次看具体情况。新生儿不可以说规定多长时间更换,而是要看他拉的情况,如果只是尿尿的话,看到鼓起来就要换了。注意洗了之后要擦干水才穿上尿不湿,要不然也很容易红屁股的。这个有个体差异的,一般来说2周岁的孩子,括约肌已经发育完善了,是可以拿掉了。但是害处和不利影响也是明显的,纸尿裤透气性能差,散热性能也不够理想。

  • 超级装备第七季(超级装备第二季)

    超级装备第七季作者:包晗近日,由中央广播电视总台影视剧纪录片中心出品的《超级装备》第二季开播。超级装备、先进技术,彰显着我国经济实力、科技实力的稳步提升。这些超级装备上天入地,无所不能,彰显着中国的工业制造水平。一个个精彩亮相,向世界展示一个锐意创新、充满活力的中国。装备,是工程建设和科技发展的重要组成部分;超级装备,则是国家发展的核心力量与重要见证。

  • 小米社区vip是什么(小米vip用户官网)

    后于2011年8月1日正式对外上线。小米社区共有9大版块,59个子版块,版主17人,管理员24人。小米社区图片缓存清理工具上线,小米社区活动专区专题上线。07月13日,社区版主chenggang123、长粒香小米、宝宝爱欢、霍叔等因个人原因离职。07月20日,小米社区联系我们及专题汇总专题上线。07月25日,小米社区社区版主月夜狼悲嚎因个人原因离职,授予小米社区荣誉建设者。

  • 微信发出去消息怎么撤回(微信发出去的消息怎么撤回)

    微信发出去消息撤回:长按聊天窗口中发出的文字内容,会出现菜单的选项框,选择点击其中的撤回功能,点击确定即可。截止2016年12月微信的月活跃用户数已达8.89亿。2018年6月20日,微信订阅号正式改版上线。2019年11月,“腾讯QQ”的小程序在微信上线。

  • 有子宫肌瘤能喝咖啡吗(有子宫肌瘤能吃辣)

    子宫是女性特有的生殖器官,子宫肌瘤也是困扰很多女性的一大难题。大多数女性都有患上子宫肌瘤的经历,它会使子宫腔变形,影响受孕。如果受孕成功,患有子宫肌瘤的女性也会很容易出现流产。据研究发现,很多子宫肌瘤的患者都是有一点肥胖的。生冷的食物会导致女性出现宫寒的症状,会加剧子宫肌瘤的病情。