[SpringSecurity]web权限方案_用户认证_查询数据库完成认证
#mysql 数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/demo?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
package com.atguigu.securitydemo1.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;@Configuration
public class SecurityConfigTest extends WebSecurityConfigurerAdapter {@Autowiredprivate UserDetailsService userDetailsService;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(userDetailsService).passwordEncoder(password());}@BeanPasswordEncoder password(){return new BCryptPasswordEncoder();}
}
第一步 引入依赖
整合MyBatisPlus完成数据库操作
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--lombok 用来简化实体类--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
</dependencies>
第二步 创建数据库和数据库表
第三步 创建users表对应实体类
package com.atguigu.securitydemo1.entity;import lombok.Data;@Data
public class Users {private Integer id;private String username;private String password;}
第四步 整合mp,创建接口,继承mp的接口
package com.atguigu.securitydemo1.entity;import lombok.Data;@Data
public class Users {private Integer id;private String username;private String password;}
第五步 在MyUserDetailsService调用mapper里面的方法查询数据库进行用户认证
package com.atguigu.securitydemo1.service;import com.atguigu.securitydemo1.entity.Users;
import com.atguigu.securitydemo1.mapper.UsersMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;import java.util.List;@Service("userDetailsService")
public class MyUserDetailsService implements UserDetailsService {@Autowiredprivate UsersMapper usersMapper;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {//调用userMapper方法,根据用户名查询数据库QueryWrapper<Users> wrapper = new QueryWrapper<>();//where username = ?wrapper.eq("username",username);Users users = usersMapper.selectOne(wrapper);//判断if (users==null)//数据库没有用户名,认证失败{throw new UsernameNotFoundException("用户名不存在!");}List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("rold");return new User(users.getUsername(),new BCryptPasswordEncoder().encode(users.getPassword()),auths);}
}
第六步 在启动类添加注解MapperScan
package com.atguigu.securitydemo1;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.atguigu.securitydemo1.mapper")
public class Securitydemo1Application {public static void main(String[] args) {SpringApplication.run(Securitydemo1Application.class, args);}}
[SpringSecurity]web权限方案_用户认证_查询数据库完成认证相关推荐
- [SpringSecurity]web权限方案_用户授权_基于权限访问控制_基于角色访问控制_hasAuthority和hasAnyAuthority_hasRole和hasAnyRole
基于角色或权限进行访问控制 hasAuthority 方法 如果当前的主体具有指定的权限,则返回 true,否则返回 false 在配置类设置当前访问地址有哪些 @Overrideprotected ...
- [SpringSecurity]web权限方案_用户认证_自定义用户登录页面
在配置类中实现相关的配置 @Overrideprotected void configure(HttpSecurity http) throws Exception {http.formLogin() ...
- [SpringSecurity]web权限方案_用户认证_设置用户名密码
设置登陆的用户名和密码 第一种方式:通过配置文件 spring.security.user.name=atguigu spring.security.user.password=atguigu 第二种 ...
- [SpringSecurity]web权限方案_用户授权_注解使用
注解使用 @Secured 判断用户是否具有角色,可以访问方法,另外需要注意的是这里匹配的字符串需要添加前缀"ROLE_". 使用注解先要开启注解功能! 启动类(配置类)开启注解 ...
- [SpringSecurity]web权限方案_用户授权_自定义403页面
自定义403页面 unauth.html <!DOCTYPE html> <html lang="en"> <head><meta cha ...
- [SpringSecurity]web权限方案_自动登陆_原理分析和具体实现
自动登陆 1.cookie技术 2.安全框架机制实现自动登陆 这里我们使用安全框架机制实现自动登陆技术 实现原理 具体实现 第一步 创建数据库 CREATE TABLE `persistent_log ...
- [SpringSecurity]web权限方案_用户注销
用户注销 在配置类中添加退出映射地址 //退出http.logout().logoutUrl("/logout").logoutSuccessUrl("/test/hel ...
- [SpringSecurity]web权限方案_CSRF功能
CSRF CSRF功能默认是已经打开了! 具体过程可以阅读CsrfFilter这个过滤器的源码 CSRF 理解 在登录页面添加一个隐藏域 <input type="hidden&quo ...
- SpringSecurity(Web权限方案)
SpringSecurity 一.基本概要 1.认证和授权 1.认证:用户是否登录 2.授权:用户是否有权利去做别的东西 2.特点 全面的权限控制 为web开发设计 旧版本不能脱离Web环境 新版本对 ...
最新文章
- git部署与基本命令汇总
- POJ 2485 - Highways(求最小生成树的最大权值-Kruskal算法)
- ndoejs优先从缓存加载机制
- VTK:可视化之Wireframe
- [error] error while loading Consumer, class file '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.25-5.b18.fc2
- 高频Linux命令小结(新手向)
- H264 STAP-A解包代码(测试通过)
- 学编程语言,记不住代码怎么办?
- LHDC、AAC、aptx、ldac、wha哪个更好,各有什么优缺点?
- 总结:硬盘随机读写与顺序读写的性能差异
- oracle 日志查看教程,Oracle 查看日志
- 【YOLOX训练部署】YOLOX训练自己的VOC数据集
- ubuntu chm文档阅读
- 【Py】隐藏warnings
- 为什么有了路由器还要光猫
- linux mysql 服务停止不了_Linux服务器mysql数据库自动停止的解决方法
- android xml 圆形图片,Android ImageView实现圆角,圆形图片
- USACO Farmer_John收苹果 (dp)
- JavaScript面向对象(上)
- matlab 中simple什么意思,[求助]Matlab2016b里没有simple函数
热门文章
- js ajax java传参_ajax参数传递与后台接收
- [转]Zookeeper入门看这篇就够了
- Android之library class android.webkit.WebViewClient depends on program class android.net.http.SslErro
- C和指针之函数之可变参数
- Android之自定义ContentProvider详解
- php一篇文零基础到制作在线图片编辑网站赚钱(gif压缩、九宫格裁剪、等比裁剪、大小变换)【php华为云实战】
- 实验报告类与对象水井问题_物业设施设备巡检检查对象、周期和频次
- 围棋经典棋谱_秀秀老师:茶艺师也要学好围棋
- google浏览器插件 开发 获取页面指定数据_程序员必备的4款Chrome插件,编程神器...
- 直角三角形知道两边求角度_每日一讲:解直角三角形(3.21)