spring boot security学习
spring boot security(一)
配置认证和授权
通过继承WebSecurityConfigurerAdapter,可以重写其认证和授权的逻辑。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {/*@Autowiredprivate DataSource dataSource;*///一个UserDetailService@Autowiredprivate AppUserDetailService appUserDetailService;//一个密码加密器@Autowiredprivate BCryptPasswordEncoder bCryptPasswordEncoder;//授权@Overrideprotected void configure(HttpSecurity http) throws Exception {//super.configure(http);//配置不需要登陆验证//http.authorizeRequests().anyRequest().permitAll().and().logout().permitAll();//http.authorizeRequests().antMatchers("/").authenticated()‘/*http.authorizeRequests().antMatchers("/Home").permitAll() //全部能访问.antMatchers("/").hasRole("asdfa"); //必须有角色xxxhttp.formLogin().loginPage("/tologin");http.csrf().disable();http.logout().logoutSuccessUrl("/");//记住我http.rememberMe();*///home必须认证了才能通过http.authorizeRequests().antMatchers("/home").authenticated();//关闭csrfhttp.csrf().disable();//登录面跳转http.formLogin().loginPage("/login").usernameParameter("username").passwordParameter("password").defaultSuccessUrl("/home") //登录成功跳转.successForwardUrl("/home");//登出跳转http.logout().logoutSuccessUrl("/");//rememberMehttp.rememberMe().rememberMeParameter("rememberme");}//认证@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {super.configure(auth);//从数据库中读取/*auth.jdbcAuthentication().dataSource(dataSource).usersByUsernameQuery("select * from admin where user = ?;").authoritiesByUsernameQuery("select * from admin where user = ?;").passwordEncoder(new BCryptPasswordEncoder());*///内存硬编码/*auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("xxx").password("yyy").and().withUser("xxxf").password("yyd");*///自定义auth.userDetailsService(appUserDetailService).passwordEncoder(bCryptPasswordEncoder);}
}
实现UserDetailsService接口
@Service
public class AppUserDetailService implements UserDetailsService {@Resourceprivate AdminMapping adminMapping;@Autowiredprivate BCryptPasswordEncoder bCryptPasswordEncoder;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {System.out.println("进入认证代码块");Admin admin = adminMapping.selectByUsername(username);System.out.println("匹配到的用户"+admin);if (admin == null){System.out.println("无用户");return null;}else {//权限组List<GrantedAuthority> list = AuthorityUtils.createAuthorityList("ADMIN");User user = new User(admin.user ,bCryptPasswordEncoder.encode(admin.pwd),list);System.out.println("查找到用户,传递给security进行认证");return user;}}
}
注入bean
BCryptPasswordEncoder
@Configuration
public class Myconfig {@Beanpublic BCryptPasswordEncoder bCryptPasswordEncoder(){return new BCryptPasswordEncoder();}
}
Encoded password does not look like BCrypt
数据库传递的密码没有经过BCrypt加密。
解决方法一:在封装User时对密码进行BCrypt加密。
//自定义
auth.userDetailsService(appUserDetailService).passwordEncoder(bCryptPasswordEncoder);//在userDetailsService中封装的密码进行encode
User user = new User(admin.user ,bCryptPasswordEncoder.encode(admin.pwd),list);
There is no PasswordEncoder mapped for the id “null”
Spring security 5.0中新增了多种加密方式,在Spring security中为了确保密码的安全性,默认是需要对密码进行加密的。
官方文档中有描述加密方式是{id}encodedPassword,其中id是加密的方式
{bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG
{noop}password
{pbkdf2}5d923b44a6d129f3ddf3e3c8d29412723dcbde72445e8ef6bf3b508fbf17fa4ed4d6b99ca763d8dc
{scrypt}$e0801$8bWJaSu2IKSn9Z9kM+TPXfOc/9bdYSrN1oD9qfVThWEwdRTnO7re7Ei+fUZRJ68k9lTyuTeUp4of4g24hHnazw==$OAOec05+bXxvuu/1qZ6NUR+xQYvYv7BeL1QxwRpY5Pc=
{sha256}97cde38028ad898ebc02e690819fa220e88c62e0699403e94fff291cfffaf8410849f27605abcbc0
spring boot security学习相关推荐
- Spring Boot 2 学习笔记(2 / 2)
Spring Boot 2 学习笔记(1 / 2) - - - 45.web实验-抽取公共页面 46.web实验-遍历数据与页面bug修改 47.视图解析-[源码分析]-视图解析器与视图 48.拦截器 ...
- Spring Boot + Security + Thymeleaf + Activiti 快速开发平台项目
点击关注公众号,实用技术文章及时了解 项目介绍 Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台 基于 Layui 的后台管 ...
- Spring Boot 框架学习笔记(五)( SpringSecurity安全框架 )
Spring Boot 框架学习笔记(五) SpringSecurity安全框架 概述 作用 开发示例: 1. 新建项目 2. 引入依赖 3. 编写`SecurityConfig`类,实现认证,授权, ...
- spring boot security 将您重定向的次数过多
在学习spring boot security的过程中遇到了这样的一个问题. 查看代码,为了跳转到我们自己定义的登录页面,写了loginPage("/login.html"),按照 ...
- Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台项目
项目介绍 Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台 基于 Layui 的后台管理系统模板,扩展 Layui 原生 U ...
- Spring Boot的学习之路(03):基础环境搭建,做好学习前的准备工作
1. 前言 <论语·魏灵公>:"工欲善其事,必先利其器.居是邦也,事其大夫之贤者,友其士之仁者." 工欲善其事必先利其器.我们在熟悉一个陌生项目的时候,首先会大概去看一 ...
- spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring
本节主要内容: 1:通过代码演示实现零XML配置spring 2:使用重点注解理解 声明: 本文是<凯哥陪你学系列-框架学习之spring boot框架学习>中spring boot框架学 ...
- boke练习: spring boot: security post数据时,要么关闭crst,要么添加隐藏域
spring boot: security post数据时,要么关闭crst,要么添加隐藏域 http.csrf().disable(); 或者: <input name="${_cs ...
- 《深入理解 Spring Cloud 与微服务构建》第十六章 Spring Boot Security 详解
<深入理解 Spring Cloud 与微服务构建>第十六章 Spring Boot Security 详解 文章目录 <深入理解 Spring Cloud 与微服务构建>第十 ...
最新文章
- 利用wget 抓取 网站网页 包括css背景图片
- IIS负载均衡-Application Request Route详解第五篇:使用ARR来配置试点项目
- 如何检查数组是否包含JavaScript中的对象?
- ip和端口正则表达式
- LeetCode 1267. 统计参与通信的服务器(计数)
- console连接h3c s5500_h3c console连接方法
- flex 颜色值uint与16进制的转换
- 软件测试—如何建立软件测试管理体系?
- 机器学习项目实战(七) 机器学习预测股价
- 15年学不会英语的原因
- 【毕设选题】基于STM32的毕业设计题目项目汇总 - 350例
- 11gR2 新特性--待定的统计信息(Pending Statistic)
- 软件测试面试中都会问到哪些关于Python的问题?
- GaussDB200 部署
- 【JY】YJK前处理参数详解及常见问题分析(一)
- vue列表进入详情页实现上一篇下一篇功能
- Java 快速深度克隆对象 [Faster Deep Copies of Java Objects]
- hive中生成32位uuid
- 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。(java)
- 微信小程序逆地址解析
热门文章
- yii2使用 db log
- 模块化数据中心还需精工细作
- WebDriver中的元素状态检测表
- JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据
- Flex与.NET互操作(四):使用HttpService、URLReqeust和URLLoader加载/传输数据
- 深入学习__doPostBack函数
- Bringing up interface eth2: Error: No suitable device found: no device found for connection 'System
- Linux报错./configure: error: C compiler cc is not found
- java的Deque栈_Java使用Deque实现堆栈的方法
- c 窗体程序 mysql_C\C++开发MySQL程序简介(下)