• 首先新建一个SpringBoot工程
  • 引入对应依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>

首先新建一个最简单的Controller

@RestController
public class TestController {@RequestMapping("hello")public String hello(){return "hello, security";}
}

测试:http://localhost:8080/hello

自动跳转到了/login页面,代表Spring Security已生效,需要账号密码进行登录

默认账号密码

  • 默认账号为user
  • 默认密码为生成的密码

    测试:

    访问成功!

通过配置文件设置账号密码

在SpringBoot配置文件中做如下配置


测试发现访问成功!

通过配置类设置账号密码

新建MySecurityConfig类继承WebSecurityConfigurerAdapter类来定义自己的安全拦截方案

@EnableWebSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("testConfig").password(passwordEncoder().encode("testConfig")).roles("admin");}@BeanPasswordEncoder passwordEncoder(){return new BCryptPasswordEncoder();}
}
  • @EnableWebSecurity:开启WebSecurity模式
  • @Bean:将实现的加密接口注入到IOC容器中
  • roles(“admin”):虽然未指定授权,但是认证时如果不加会报Cannot pass a null GrantedAuthority collection错误

测试发现访问成功!

通过自定义实现类实现通过数据库认证

前面两种设置方式在实际开发中并不实用,因为用户的账号密码是存放在数据库中的。接下来实现根据数据库认证。

首先引入对应依赖

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
  • 数据库:MySQL
  • 持久层框架:MyBatis-Plus
  • lombok:简化开发的工具

新建用户表users

create table users
(id       bigint auto_increment comment '主键ID' primary key,username varchar(30) null comment '账号',password varchar(30) null comment '密码'
);insert into users (id, username, password) values
(1,'test1','test1'),
(2,'test2','test2')

实际开发中应使用RBAC模型,这里就简化了

新建对应实体类User

package com.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;@Data
public class Users {@TableId(type = IdType.AUTO)private int id;private String username;private String password;
}

编写Mapper层UserMapper继承BaseMapper

package com.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.entity.Users;
import org.springframework.stereotype.Repository;@Repository
public interface UsersMapper extends BaseMapper<Users> {}
  • 注意编写完Mapper层后需要在主启动类上增加注释@MapperScan(“com.mapper”)来扫描对应的包

在配置类中指定UserDetailsService实现类

@EnableWebSecurity
public class MySecurityConfig2 extends WebSecurityConfigurerAdapter {@Autowiredprivate MyUserDetailsService myUserDetailsService;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(myUserDetailsService).passwordEncoder(passwordEncoder());}@BeanPasswordEncoder passwordEncoder(){return new BCryptPasswordEncoder();}
}

对应的UserDetailsService实现类编写

@Service
public class MyUserDetailsService implements UserDetailsService {@AutowiredUsersMapper usersMapper;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {QueryWrapper<Users> wrapper = new QueryWrapper<>();wrapper.eq("username", username);Users users = usersMapper.selectOne(wrapper);if (users == null) {throw new UsernameNotFoundException("用户不存在");}List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("admin");return new User(users.getUsername(), new BCryptPasswordEncoder().encode(users.getPassword()), auths);}
}

根据用户名查询数据库上对应的用户进行认证

测试:

访问成功!

Spring Security (一) : 设置登录账号密码的三种方式相关推荐

  1. SpringSecurity用户认证设置用户名和密码的三种方式

    文章目录 SpringSecurity用户认证设置用户名和密码的三种方式 首先明白几个单词的意思: SpringSecurity默认的用户认证 1.通过配置文件进行用户认证 2.通过配置类进行用户认证 ...

  2. Tomcat设置登录账号密码

    Tomcat设置登录账号密码 VV-酱 进入本地安装的tomcat/conf文件下找到 tomcat-users.xml 并编辑(编辑前记得关闭tomcat) 在最后结束标签上面加上这段话 <u ...

  3. linux设置开机自启服务,linux设置服务开机自启动的三种方式

    linux设置服务开机自启动的三种方式 这里介绍一下linux开机自动启动的几种方法,共计3种,大家可以借鉴一下!经验里面以centos 5.3系统为例! 方法1:.利用ntsysv命令进行设置,利用 ...

  4. 设置word只读模式的三种方式,分别如何取消只读模式?

    word文件可以设置只读模式,但是设置只读模式的方法不止有一种,今天和大家分享三种方式: 方式一: 这种只读模式仅起到提示功能,只是在打开文件时提示他人作者希望以只读方式打开,但是打开文件之后,我们还 ...

  5. android 加阴影,Android设置控件阴影的三种方式

    释放双眼,带上耳机,听听看~! 第一种方式:elevation View的大小位置都是通过x,y确定的,而现在有了z轴的概念,而这个z值就是View的高度(elevation),而高度决定了阴影(sh ...

  6. 去除浏览器自动填充账号密码的几种方式

    作为一个前端,经常在页面画好以后,发现不需要自动填充账号密码的地方会出现浏览器弹窗 可以通过增加一个不显示的input 如果是element ui 可以使用 auto-complete="n ...

  7. Spring MVC 下设置默认访问页面的3种方式

    1.默认tomcat容器的默认页面. <welcome-file-list> <welcome-file>/index.html</welcome-file> &l ...

  8. Spring boot Mybatis-Plus数据库单测实战(三种方式)

      单元测试长久以来是热门话题,本文不会讨论需不需要写单测,可以看看参考资料1,我个人认为写好单测应该是每个优秀开发者必备的技能,关于写单测的好处在这里我就不展开讨论了,快速进入本文着重讨论的话题,如 ...

  9. Linux设置软件开机自启动的三种方式(中标麒麟、银河麒麟、ubuntu)

    一.有界面的程序自启动 利用Linux的 .desktop文件实现开机启动. 在/etc/xdg/autostart 目录下建立一个 test.desktop文件,并对文件进行以下编辑. 操作步骤 打 ...

最新文章

  1. 中文版NCCN指南PPT分享(36本)
  2. 仿Gin搭建自己的web框架(五)
  3. Kotlin的2017年总结与2018年展望
  4. 目前最厉害的象棋软件_qq什么引流方式最厉害,QQ引流目前最有效的方法
  5. python3 输入输出_Python3基础之输入和输出实例分析
  6. 启动器和选择器学习-----(1)总括
  7. 源码网络-推荐精品×××站
  8. 微信加入新功能,60秒语音不必从头听到尾,网友:还需要进度条
  9. 判断浏览器 插件 jquery.ua.js
  10. 异或加密的java算法_Java使用异或运算实现简单的加密解密算法实例代码
  11. 接口规范 7. 按需录制相关接口
  12. Mobile端Catalog下面Category的配置步骤
  13. 加速网站速度的最佳做法_(2)把样式表放在顶部
  14. 解决Vsphere Client 60天过期问题
  15. WINDOWSXP主题风格美化教程
  16. 如何批量查询excel中的手机号归属地?
  17. 【Windows】安装显卡驱动+cuda+cudnn
  18. 【联想拯救者R7000】蓝牙和wifi图标不显示问题(已解决)
  19. 高度的思想境界的几个特征
  20. linux日志生成工具,linux系统日志管理工具logrotate之生产实例

热门文章

  1. Unity流水账9:Timeline
  2. day3----部署duboo微服务值部署zk和Jenkins(3)
  3. 安卓应用发布在各大应用市场方法整理
  4. logback各标签详解
  5. 论文作业(2):Lossless Audio Coding 算法比较
  6. Scala初级实践——统计手机耗费流量(1)
  7. 不推荐理财保险(分红险、投资连结险等)的几点理由---实际案例分析计算说明
  8. java 微信 jssdk 分享朋友圈_JSSDK微信自定义分享朋友圈
  9. Androidq下编译efr32mg21
  10. matlab模式识别提取特征向量,一种基于小波特征向量提取的手机检测方法与流程...