Spring Security-查询数据库认证

这篇具有很好参考价值的文章主要介绍了Spring Security-查询数据库认证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

查询数据库认证权限(未自定义页面)

整合mybatis-plus 完成数据库操作

1.引入相关依赖

再父工程中 增加 mybatis-plus lombok mysql 相关依赖及版本号

 
<dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-dependencies</artifactId>
             <version>2.6.7</version>
             <scope>import</scope>
             <type>pom</type>
         </dependency>
         <!--引入mysql -->
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>8.0.28</version>
         </dependency>
         <!--引入 lombok -->
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <version>1.18.24</version>
         </dependency>
     </dependencies>
 </dependencyManagement>

再子项目中 引入 

 <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>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>
 ​
     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
     </dependency>
 ​
 </dependencies>
2.创建表 user_info

Spring Security-查询数据库认证,Spring Security,spring,java,后端

3.创建实体类
 
package com.entity;
 ​
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 ​
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
 public class UserInfo {
     private Integer id;
     private String name;
     private String pwd;
     private String email;
     private String tel;
 }
4.整合mybatis-plus ,创建接口 继承 BaseMapper
 package com.mapper;
 ​
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.entity.UserInfo;
 ​
 public interface UserInfoMapper extends BaseMapper<UserInfo> {
 }
5.创建service 即UserDetailsService 接口实现类
 
package com.service;
 ​
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.entity.UserInfo;
 import com.mapper.UserInfoMapper;
 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.ArrayList;
 import java.util.List;
 ​
 @Service("userDetailsService")
 public class MyUserDetailsService implements UserDetailsService {
 ​
     @Autowired
     private UserInfoMapper userInfoMapper;
 ​
 ​
 ​
     @Override
     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
 ​
         //根据用户名 查询
         QueryWrapper<UserInfo> wrapper=new QueryWrapper<>();
         wrapper.eq("name",username);   //查询 name列 的值 为 username的 数据
         UserInfo info = userInfoMapper.selectOne(wrapper);
         //判断
         if(info==null){   //没有用户 验证失败
             throw new UsernameNotFoundException("用户名不存在");
         }
 ​
         List<GrantedAuthority> list = AuthorityUtils.commaSeparatedStringToAuthorityList("admin");
         //返回数据库的用户名及密码
         return new User(info.getName(), new BCryptPasswordEncoder().encode(info.getPwd()),list);
     }
 }
6. 再启动类增加 mapperscan 或 再 4的接口增加@Mapper
 package com;
 ​
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 ​
 @SpringBootApplication
 @MapperScan(basePackages = "com.mapper")   //扫描mapper接口
 public class SSApp {
     public static void main(String[] args) {
         SpringApplication.run(SSApp.class,args);
     }
 }
7.数据库配置
 spring:
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://localhost:3306/ssm
     username: root
     password: 自己的密码

启动项目 , 输入 错误的用户名及密码 显示

Spring Security-查询数据库认证,Spring Security,spring,java,后端

输入 正确的用户名与密码 即可 看到页面

查询数据库认证权限(自定义页面)

上面的内容 登录均采用 secutity的登录页面,而且经过认证才可以访问controller,

其实 可以自定义登陆页面 及 不需要认证也可以访问controller

下面 我们继续学习

1.在 配置类中 编写配置

重写protected void configure(HttpSecurity http) throws Exception 方法

 
package com.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.builders.HttpSecurity;
 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 SecurityConfig extends WebSecurityConfigurerAdapter {
 ​
     @Autowired
     UserDetailsService userDetailsService;
 ​
 ​
     @Override
     protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
     }
     @Bean
     PasswordEncoder passwordEncoder(){
         return new BCryptPasswordEncoder();
     }
 ​
     @Override
     protected void configure(HttpSecurity http) throws Exception {
         http.formLogin().loginPage("/login.html")   // 自定义登录页面
                         .loginProcessingUrl("/user/login")     //登录访问路径
                         .defaultSuccessUrl("/test/index").permitAll()      //登录成功后 跳转路径
                         .and().authorizeRequests()
                         .antMatchers("/","/user/login","/test/add").permitAll() //设置哪些路径可以不认证 直接访问
                         .anyRequest().authenticated()
                         .and().csrf().disable() ; // 关闭csrf的防护
     }
 }


2.编写页面及controller

在 resources下 建立static ,并创建 login.html

注意: 页面中 input的 名字 必须 为 username与password , 因为 security中过滤器 会 使用 这个参数名获取

form的action 的值 与 配置类的中 登录访问路径一致

 <form action="/user/login" method="post">
     <input type="text" name="username" placeholder="输入用户名"/><br/>
     <input type="password" name="password" placeholder="输入密码"/><br/>
     <input type="submit" value="注册"/>
 </form>
 @RestController
 @RequestMapping("/test")
 public class TestController {
 ​
     @GetMapping("/index")       -----------------增加内容   配置类中配置  /test/index
     public String index(){
         return "hello index";
     }
 ​
 ​
     @GetMapping("/add")
     public String add(){
         return "hello security";
     }
 }

启动 运行

Spring Security-查询数据库认证,Spring Security,spring,java,后端

在地址栏输入: http://localhost:8080/test/index 则进入到登录页面

Spring Security-查询数据库认证,Spring Security,spring,java,后端

在上面的页面上 输入正确的 用户名及密码 , 可以进入页面

Spring Security-查询数据库认证,Spring Security,spring,java,后端文章来源地址https://www.toymoban.com/news/detail-799536.html

到了这里,关于Spring Security-查询数据库认证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现

    上文说到,Spring Security它是一个强大的和高度可定制的身份验证和访问控制框架。它提供了一套丰富的功能,用于保护基于Spring的应用程序。 上文又说到,在Spring Security中,过滤器(Filter)是一个重要的组件,用于处理身份验证、授权和其他安全相关的任务。 Spring Security 的

    2024年04月22日
    浏览(28)
  • Spring Security认证流程分析

    先分别实现 userdetailsService,userDetails,passwordEncoder三个接口, 然后就是写登录逻辑 本文章用的是继承UsernamePasswordAuthenticationFilter这个接口 因为这个框架默认登录逻辑是在这里面的,里面的核心就是通过 这里这个接口可以不用写过滤器里,可以直接写在serviceImpl里面的登录逻

    2024年04月28日
    浏览(26)
  • Spring Boot 如何使用 Spring Security 进行认证和授权

    在 Web 应用程序中,认证和授权是非常重要的功能。Spring Security 是一个基于 Spring 框架的强大的安全框架,它提供了完整的认证和授权解决方案,并且可以轻松地集成到 Spring Boot 应用程序中。本文将介绍如何在 Spring Boot 中使用 Spring Security 进行认证和授权,并提供示例代码。

    2024年02月11日
    浏览(29)
  • Spring Security 多因素认证(MFA)

    Spring Security 系列文章开始更新了!工程地址为github.com/ReLive27/sp…,如果你对此系列感谢趣,可以点击关注作者获取最新文章发布信息。 多因素身份验证是一种提高产品安全性的方法,它通过要求用户提供除用户名和密码之外的第二种形式的身份验证来增加额外的安全层。

    2024年02月08日
    浏览(26)
  • Spring Security 6.1.2 认证 配置

    我实现了UserDetailsService (loadUserByUsername通过用户名查用户) 以及UserDetailsPasswordService(updatePassword)更改密码

    2024年02月14日
    浏览(30)
  • Spring Security进行登录认证和授权

    用户首次登录提交用户名和密码后spring security 的 UsernamePasswordAuthenticationFilter 把用户名密码封装 Authentication 对象 然后内部调用 ProvideManager 的 authenticate 方法进行认证,然后 ProvideManager 进一步通过内部调用 DaoAuthencationPriovider 的 authenticate 方法进行认证 DaoAuthencationPriovider 通过

    2024年02月11日
    浏览(32)
  • spring boot security使用jwt认证

    在前面的几篇文章中: spring boot security快速使用示例 spring boot security之前后端分离配置 spring boot security自定义认证 spring boot security验证码登录示例 基本对常用的基于cookie和session的认证使用场景都已覆盖。但是session属于有状态认证,本文给出一个无状态的认证:jwt认证示例。

    2024年02月12日
    浏览(29)
  • Spring Security 构建基于 JWT 的登录认证

    一言以蔽之,JWT 可以携带非敏感信息,并具有不可篡改性。可以通过验证是否被篡改,以及读取信息内容,完成网络认证的三个问题:“你是谁”、“你有哪些权限”、“是不是冒充的”。   为了安全,使用它需要采用 Https 协议,并且一定要小心防止用于加密的密钥泄露。

    2024年02月16日
    浏览(32)
  • Spring Security 如何实现身份认证和授权?

    Spring Security 是一个开源的安全框架,提供了基于权限的访问控制、身份认证、安全性事件发布等功能。在 Spring Boot 应用中使用 Spring Security 可以非常方便地实现用户身份认证和授权。 Spring Security 实现身份认证的主要方式是使用认证过滤器链,该过滤器链包含多个过滤器,用

    2024年02月06日
    浏览(38)
  • 后端进阶之路——综述Spring Security认证,授权(一)

    「作者主页」 :雪碧有白泡泡 「个人网站」 :雪碧的个人网站 「推荐专栏」 : ★ java一站式服务 ★ ★ 前端炫酷代码分享 ★ ★ uniapp-从构建到提升 ★ ★ 从0到英雄,vue成神之路 ★ ★ 解决算法,一个专栏就够了 ★ ★ 架构咱们从0说 ★ ★ 数据流通的精妙之道★ ★后端进

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包