Spring Security (一) : 设置登录账号密码的三种方式
- 首先新建一个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 (一) : 设置登录账号密码的三种方式相关推荐
- SpringSecurity用户认证设置用户名和密码的三种方式
文章目录 SpringSecurity用户认证设置用户名和密码的三种方式 首先明白几个单词的意思: SpringSecurity默认的用户认证 1.通过配置文件进行用户认证 2.通过配置类进行用户认证 ...
- Tomcat设置登录账号密码
Tomcat设置登录账号密码 VV-酱 进入本地安装的tomcat/conf文件下找到 tomcat-users.xml 并编辑(编辑前记得关闭tomcat) 在最后结束标签上面加上这段话 <u ...
- linux设置开机自启服务,linux设置服务开机自启动的三种方式
linux设置服务开机自启动的三种方式 这里介绍一下linux开机自动启动的几种方法,共计3种,大家可以借鉴一下!经验里面以centos 5.3系统为例! 方法1:.利用ntsysv命令进行设置,利用 ...
- 设置word只读模式的三种方式,分别如何取消只读模式?
word文件可以设置只读模式,但是设置只读模式的方法不止有一种,今天和大家分享三种方式: 方式一: 这种只读模式仅起到提示功能,只是在打开文件时提示他人作者希望以只读方式打开,但是打开文件之后,我们还 ...
- android 加阴影,Android设置控件阴影的三种方式
释放双眼,带上耳机,听听看~! 第一种方式:elevation View的大小位置都是通过x,y确定的,而现在有了z轴的概念,而这个z值就是View的高度(elevation),而高度决定了阴影(sh ...
- 去除浏览器自动填充账号密码的几种方式
作为一个前端,经常在页面画好以后,发现不需要自动填充账号密码的地方会出现浏览器弹窗 可以通过增加一个不显示的input 如果是element ui 可以使用 auto-complete="n ...
- Spring MVC 下设置默认访问页面的3种方式
1.默认tomcat容器的默认页面. <welcome-file-list> <welcome-file>/index.html</welcome-file> &l ...
- Spring boot Mybatis-Plus数据库单测实战(三种方式)
单元测试长久以来是热门话题,本文不会讨论需不需要写单测,可以看看参考资料1,我个人认为写好单测应该是每个优秀开发者必备的技能,关于写单测的好处在这里我就不展开讨论了,快速进入本文着重讨论的话题,如 ...
- Linux设置软件开机自启动的三种方式(中标麒麟、银河麒麟、ubuntu)
一.有界面的程序自启动 利用Linux的 .desktop文件实现开机启动. 在/etc/xdg/autostart 目录下建立一个 test.desktop文件,并对文件进行以下编辑. 操作步骤 打 ...
最新文章
- 中文版NCCN指南PPT分享(36本)
- 仿Gin搭建自己的web框架(五)
- Kotlin的2017年总结与2018年展望
- 目前最厉害的象棋软件_qq什么引流方式最厉害,QQ引流目前最有效的方法
- python3 输入输出_Python3基础之输入和输出实例分析
- 启动器和选择器学习-----(1)总括
- 源码网络-推荐精品×××站
- 微信加入新功能,60秒语音不必从头听到尾,网友:还需要进度条
- 判断浏览器 插件 jquery.ua.js
- 异或加密的java算法_Java使用异或运算实现简单的加密解密算法实例代码
- 接口规范 7. 按需录制相关接口
- Mobile端Catalog下面Category的配置步骤
- 加速网站速度的最佳做法_(2)把样式表放在顶部
- 解决Vsphere Client 60天过期问题
- WINDOWSXP主题风格美化教程
- 如何批量查询excel中的手机号归属地?
- 【Windows】安装显卡驱动+cuda+cudnn
- 【联想拯救者R7000】蓝牙和wifi图标不显示问题(已解决)
- 高度的思想境界的几个特征
- linux日志生成工具,linux系统日志管理工具logrotate之生产实例
热门文章
- Unity流水账9:Timeline
- day3----部署duboo微服务值部署zk和Jenkins(3)
- 安卓应用发布在各大应用市场方法整理
- logback各标签详解
- 论文作业(2):Lossless Audio Coding 算法比较
- Scala初级实践——统计手机耗费流量(1)
- 不推荐理财保险(分红险、投资连结险等)的几点理由---实际案例分析计算说明
- java 微信 jssdk 分享朋友圈_JSSDK微信自定义分享朋友圈
- Androidq下编译efr32mg21
- matlab模式识别提取特征向量,一种基于小波特征向量提取的手机检测方法与流程...