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学习相关推荐

  1. Spring Boot 2 学习笔记(2 / 2)

    Spring Boot 2 学习笔记(1 / 2) - - - 45.web实验-抽取公共页面 46.web实验-遍历数据与页面bug修改 47.视图解析-[源码分析]-视图解析器与视图 48.拦截器 ...

  2. Spring Boot + Security + Thymeleaf + Activiti 快速开发平台项目

    点击关注公众号,实用技术文章及时了解 项目介绍 Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台 基于 Layui 的后台管 ...

  3. Spring Boot 框架学习笔记(五)( SpringSecurity安全框架 )

    Spring Boot 框架学习笔记(五) SpringSecurity安全框架 概述 作用 开发示例: 1. 新建项目 2. 引入依赖 3. 编写`SecurityConfig`类,实现认证,授权, ...

  4. spring boot security 将您重定向的次数过多

    在学习spring boot security的过程中遇到了这样的一个问题. 查看代码,为了跳转到我们自己定义的登录页面,写了loginPage("/login.html"),按照 ...

  5. Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台项目

    项目介绍 Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台 基于 Layui 的后台管理系统模板,扩展 Layui 原生 U ...

  6. Spring Boot的学习之路(03):基础环境搭建,做好学习前的准备工作

    1. 前言 <论语·魏灵公>:"工欲善其事,必先利其器.居是邦也,事其大夫之贤者,友其士之仁者." 工欲善其事必先利其器.我们在熟悉一个陌生项目的时候,首先会大概去看一 ...

  7. spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring

    本节主要内容: 1:通过代码演示实现零XML配置spring 2:使用重点注解理解 声明: 本文是<凯哥陪你学系列-框架学习之spring boot框架学习>中spring boot框架学 ...

  8. boke练习: spring boot: security post数据时,要么关闭crst,要么添加隐藏域

    spring boot: security post数据时,要么关闭crst,要么添加隐藏域 http.csrf().disable(); 或者: <input name="${_cs ...

  9. 《深入理解 Spring Cloud 与微服务构建》第十六章 Spring Boot Security 详解

    <深入理解 Spring Cloud 与微服务构建>第十六章 Spring Boot Security 详解 文章目录 <深入理解 Spring Cloud 与微服务构建>第十 ...

最新文章

  1. 利用wget 抓取 网站网页 包括css背景图片
  2. IIS负载均衡-Application Request Route详解第五篇:使用ARR来配置试点项目
  3. 如何检查数组是否包含JavaScript中的对象?
  4. ip和端口正则表达式
  5. LeetCode 1267. 统计参与通信的服务器(计数)
  6. console连接h3c s5500_h3c console连接方法
  7. flex 颜色值uint与16进制的转换
  8. 软件测试—如何建立软件测试管理体系?
  9. 机器学习项目实战(七) 机器学习预测股价
  10. 15年学不会英语的原因
  11. 【毕设选题】基于STM32的毕业设计题目项目汇总 - 350例
  12. 11gR2 新特性--待定的统计信息(Pending Statistic)
  13. 软件测试面试中都会问到哪些关于Python的问题?
  14. GaussDB200 部署
  15. 【JY】YJK前处理参数详解及常见问题分析(一)
  16. vue列表进入详情页实现上一篇下一篇功能
  17. Java 快速深度克隆对象 [Faster Deep Copies of Java Objects]
  18. hive中生成32位uuid
  19. 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。(java)
  20. 微信小程序逆地址解析

热门文章

  1. yii2使用 db log
  2. 模块化数据中心还需精工细作
  3. WebDriver中的元素状态检测表
  4. JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据
  5. Flex与.NET互操作(四):使用HttpService、URLReqeust和URLLoader加载/传输数据
  6. 深入学习__doPostBack函数
  7. Bringing up interface eth2: Error: No suitable device found: no device found for connection 'System
  8. Linux报错./configure: error: C compiler cc is not found
  9. java的Deque栈_Java使用Deque实现堆栈的方法
  10. c 窗体程序 mysql_C\C++开发MySQL程序简介(下)