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

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

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

在配置文件中使用#如果在代码里配置了用户信息这个就不能使用了呢?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

,
    推荐阅读
  • 小虾米的做法大全(小虾米烹饪方法)

    小虾米的做法大全冬瓜海带小虾米主料:冬瓜100g、海带150g、小虾米30g。水开后,放入小虾米。虾米烧冬瓜用料:冬瓜300克、虾米100克、食盐适量、味精少许、葱少许、姜少许、植物油适量、细香葱适量。待到冬瓜煮到透亮,放入香葱段,加少许盐,味精调味即可出锅。瘦肉切片,香葱切沫备用。电饭锅煮粥至米开花倒入泡好的虾米,煮至米烂倒入瘦肉煮5分钟,倒入麻油,香葱沫调味即可食用。

  • 芡实怎么煮(芡实如何煮)

    相对于整个芡实来说,因为是半边的,中间部分更容易煮到,所以更容易煮烂。用水将芡实泡开之后,可以明显缩短煮的时间。如果着急,可以选择用开水泡,那么会泡开的更快一些!看见水在沸腾,这时候,将火关掉,焖上十五分钟,再接着煮,芡实会烂的更快一些。因为开水已经达到了沸点,所以用开水煮,可以缩短等待水开的时间。也就是我们平时说的文火,虽然用的时间可能长一些,但是煮出来的芡实很软糯可口哦!

  • 杜鹃花黄叶掉叶是怎么回事(杜鹃花掉叶怎么办)

    杜鹃花在秋冬季节一般要保持在10度以上的养护温度,否则就会因为温度过低而导致落叶现象。杜鹃花在秋冬季节尽量摆放在家中向阳的地方,让它接受温暖的光照,养护杜鹃花还要注意不要经常性的去挪动花盆位置,这样才能够保证杜鹃花开花的长势。

  • 多肉丸叶姬秋丽的养殖方法和注意事项(怎么养丸叶姬秋丽)

    多肉丸叶姬秋丽的养殖方法和注意事项养殖丸叶姬秋丽需要选择疏松透气、排水性良好的肥沃土壤,可以选择用泥炭土、河沙和珍珠岩等壤土进行混合配置。在养殖丸叶姬秋丽的过程中,还需要每隔1至2年为它换一次新的盆土。养殖丸叶姬秋丽需要定期为其进行修剪,如将徒长枝叶剪除,促使它的侧芽萌发,使其生长的更加旺盛。注意修剪时要定期的将一些细弱的枝叶剪除,减少丸叶姬秋丽营养消耗,让其养分更加的集中。

  • 腰部拉伸的方法(如何拉伸腰部)

    采用瑜伽式侧身弯腰拉伸腰部,带动腰部底侧肌肉拉伸,这样的效果更佳,左右各4各8拍。附身反手摸脚尖拉伸腰部运动,主要可以练习腰部的纵向拉伸程度,左右各4各8拍。使用健身球放松背部平躺在健身球上面拉伸腰部肌肉。引体向上运动拉伸腰部运动,这个是采用自身重力来纵向拉伸腰部肌肉,悬垂10秒即可,可以做8到12组。

  • 马克思主义已经过时了吗(马克思主义已经过时了吗)

    阶级,是按照所有制的关系,按照经济地位和政治地位来划分的一个社会集团。在资本主义社会,老板和工人就是两个不同的阶级,很明显。但是也不能因为现在现实的复杂性,去否认马克思的阶级和阶级斗争的理论。

  • 有一个人寻找麦田树子的故事(窗前有棵银杏树)

    我北京公寓楼的窗下有棵银杏树,从种植到现在已经有25年了,从小到大,我见证了它的成长,它见证了我的工作和生活。就这样,竹林挪走了,小银杏在竹子的包围中得到了解放。按中国的阴阳学说法,黄色在五行中为土,在五行中土为尊、为大。皇帝尊崇黄土,尊崇黄色,君临天下,替天行权。银杏的黄色也自然与天地一样尊贵!

  • 双离合变速箱的优缺点是什么(双离合变速器优缺点有哪些)

    跟着小编一起来看一看吧!双离合变速箱的优缺点是什么干式双离合优点:结构简单、成本低、后期维护和维修的成本也更低。湿式双离合优点:冷却效果更好、承受更大的功率和扭矩。

  • 产后肺炎一般治疗多久能好(新妈妈产后迅速恢复的门道)

    此病虽发病率高,但如果及时到医院就诊,得到合理治疗、护理,治愈率较高。母亲有感冒,接触患儿时必须戴口罩。对新生儿肺炎患儿如何进行家庭护理保持呼吸道通畅因新生儿小,咳嗽无力,痰不能咳出,需要家长帮助。保证营养供给少量、多次喂奶并防止呕吐。重者肝大明显,容易有心力衰竭、惊厥等合并症;肺部体征出现较迟。白细胞计数大都没有增高,若出现继发性细茵感染则明显增多。本病可用咽拭子病毒分离及双份血清检查进行确诊。

  • 卤水排骨制作方法(卤水排骨的做法)

    卤水排骨制作方法食材:猪排骨300克、姜20克、料酒15克、泡辣椒米15克、青椒15克、葱20克、味精1克、精炼油1000克、甜椒15克、红卤水500克、盐3克。选择肉厚的排骨,改刀成6厘米长的节,用盐、料酒、姜、葱码味30分钟。将排骨氽水后,放入红卤水锅中,卤制成熟入味,捞出。锅置旺火上,加入精炼油加热至150一170C时,放入排骨,炸至金黄色。