#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权限方案_用户认证_查询数据库完成认证相关推荐

  1. [SpringSecurity]web权限方案_用户授权_基于权限访问控制_基于角色访问控制_hasAuthority和hasAnyAuthority_hasRole和hasAnyRole

    基于角色或权限进行访问控制 hasAuthority 方法 如果当前的主体具有指定的权限,则返回 true,否则返回 false 在配置类设置当前访问地址有哪些 @Overrideprotected ...

  2. [SpringSecurity]web权限方案_用户认证_自定义用户登录页面

    在配置类中实现相关的配置 @Overrideprotected void configure(HttpSecurity http) throws Exception {http.formLogin() ...

  3. [SpringSecurity]web权限方案_用户认证_设置用户名密码

    设置登陆的用户名和密码 第一种方式:通过配置文件 spring.security.user.name=atguigu spring.security.user.password=atguigu 第二种 ...

  4. [SpringSecurity]web权限方案_用户授权_注解使用

    注解使用 @Secured 判断用户是否具有角色,可以访问方法,另外需要注意的是这里匹配的字符串需要添加前缀"ROLE_". 使用注解先要开启注解功能! 启动类(配置类)开启注解 ...

  5. [SpringSecurity]web权限方案_用户授权_自定义403页面

    自定义403页面 unauth.html <!DOCTYPE html> <html lang="en"> <head><meta cha ...

  6. [SpringSecurity]web权限方案_自动登陆_原理分析和具体实现

    自动登陆 1.cookie技术 2.安全框架机制实现自动登陆 这里我们使用安全框架机制实现自动登陆技术 实现原理 具体实现 第一步 创建数据库 CREATE TABLE `persistent_log ...

  7. [SpringSecurity]web权限方案_用户注销

    用户注销 在配置类中添加退出映射地址 //退出http.logout().logoutUrl("/logout").logoutSuccessUrl("/test/hel ...

  8. [SpringSecurity]web权限方案_CSRF功能

    CSRF CSRF功能默认是已经打开了! 具体过程可以阅读CsrfFilter这个过滤器的源码 CSRF 理解 在登录页面添加一个隐藏域 <input type="hidden&quo ...

  9. SpringSecurity(Web权限方案)

    SpringSecurity 一.基本概要 1.认证和授权 1.认证:用户是否登录 2.授权:用户是否有权利去做别的东西 2.特点 全面的权限控制 为web开发设计 旧版本不能脱离Web环境 新版本对 ...

最新文章

  1. git部署与基本命令汇总
  2. POJ 2485 - Highways(求最小生成树的最大权值-Kruskal算法)
  3. ndoejs优先从缓存加载机制
  4. VTK:可视化之Wireframe
  5. [error] error while loading Consumer, class file '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.25-5.b18.fc2
  6. 高频Linux命令小结(新手向)
  7. H264 STAP-A解包代码(测试通过)
  8. 学编程语言,记不住代码怎么办?
  9. LHDC、AAC、aptx、ldac、wha哪个更好,各有什么优缺点?
  10. 总结:硬盘随机读写与顺序读写的性能差异
  11. oracle 日志查看教程,Oracle 查看日志
  12. 【YOLOX训练部署】YOLOX训练自己的VOC数据集
  13. ubuntu chm文档阅读
  14. 【Py】隐藏warnings
  15. 为什么有了路由器还要光猫
  16. linux mysql 服务停止不了_Linux服务器mysql数据库自动停止的解决方法
  17. android xml 圆形图片,Android ImageView实现圆角,圆形图片
  18. USACO Farmer_John收苹果 (dp)
  19. JavaScript面向对象(上)
  20. matlab 中simple什么意思,[求助]Matlab2016b里没有simple函数

热门文章

  1. js ajax java传参_ajax参数传递与后台接收
  2. [转]Zookeeper入门看这篇就够了
  3. Android之library class android.webkit.WebViewClient depends on program class android.net.http.SslErro
  4. C和指针之函数之可变参数
  5. Android之自定义ContentProvider详解
  6. php一篇文零基础到制作在线图片编辑网站赚钱(gif压缩、九宫格裁剪、等比裁剪、大小变换)【php华为云实战】
  7. 实验报告类与对象水井问题_物业设施设备巡检检查对象、周期和频次
  8. 围棋经典棋谱_秀秀老师:茶艺师也要学好围棋
  9. google浏览器插件 开发 获取页面指定数据_程序员必备的4款Chrome插件,编程神器...
  10. 直角三角形知道两边求角度_每日一讲:解直角三角形(3.21)