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

这篇具有很好参考价值的文章主要介绍了【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

上文说到,Spring Security它是一个强大的和高度可定制的身份验证和访问控制框架。它提供了一套丰富的功能,用于保护基于Spring的应用程序。

上文又说到,在Spring Security中,过滤器(Filter)是一个重要的组件,用于处理身份验证、授权和其他安全相关的任务。

【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现,云原生系列--微服务,spring,springcloud,微服务,安全架构

Spring Security 过滤器概述

Spring Security 的过滤器链由多个过滤器组成,每个过滤器负责处理特定的安全任务。当请求到达应用程序时,它会依次通过过滤器链中的每个过滤器,直到到达目标资源。

在过滤器链中,每个过滤器都可以对请求进行拦截、修改或执行其他操作,以确保应用程序的安全性。

【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现,云原生系列--微服务,spring,springcloud,微服务,安全架构

Spring Security 主要过滤器介绍

这里先列举一些Spring Security中常用的过滤器:

  • SecurityContextPersistenceFilter:负责将安全上下文存储在HttpSession中,以便在后续请求中访问。
  • UsernamePasswordAuthenticationFilter:处理基于表单的身份验证。它拦截包含用户名和密码的请求,并执行身份验证过程。
  • LogoutFilter:处理注销请求,清除安全上下文和会话数据。
  • ExceptionTranslationFilter:捕获并处理认证和授权过程中发生的异常。
  • FilterSecurityInterceptor:根据安全配置决定是否允许访问特定的资源。

更详细的请看下图:

【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现,云原生系列--微服务,spring,springcloud,微服务,安全架构

基于JDBC的认证实现

基于JDBC的认证是指使用关系型数据库(如MySQL、Oracle等)存储用户凭据(用户名和密码),并通过JDBC进行身份验证的过程。

如何实现基于JDBC的认证呢,接下来我们以一个课设作栗子来学习一下!

【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现,云原生系列--微服务,spring,springcloud,微服务,安全架构

首先,我们需要在Spring配置中配置数据源,以便能够连接到我们的数据库。

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>  
    <property name="url" value="jdbc:mysql://localhost:3306/xiaowei"/>  
    <property name="username" value="xiaoweiya"/>  
    <property name="password" value="123456"/>  
</bean>

我们的数据库表,也列到这里吧,虽然语句短小精悍:

CREATE TABLE users (  
    id INT AUTO_INCREMENT PRIMARY KEY,  
    username VARCHAR(50) NOT NULL,  
    password VARCHAR(50) NOT NULL  
);

实现UserDetailsService接口,以便Spring Security能够查询数据库以获取用户详细信息。在这个实现中,我们需要使用JDBC来查询用户表。

@Service  
public class JdbcUserDetailsService implements UserDetailsService {  
    @Autowired  
    private JdbcTemplate jdbcTemplate;  
  
    @Override  
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {  
        String sql = "SELECT id, username, password FROM users WHERE username = ?";  
        User user = jdbcTemplate.queryForObject(sql, new Object[]{username}, new BeanPropertyRowMapper<>(User.class));  
        return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), new ArrayList<>());  
    }  
}

最后,配置Spring Security使用我们的UserDetailsService实现和JDBC数据源。在配置中,我们需要启用基于表单的身份验证,并设置安全约束。

@Configuration  
@EnableWebSecurity  
public class SecurityConfig extends WebSecurityConfigurerAdapter {  
    @Autowired  
    private JdbcUserDetailsService userDetailsService;  
  
    @Override  
    protected void configure(HttpSecurity http) throws Exception {  
        http  
            .authorizeRequests()  
                .antMatchers("/login").permitAll()  
                .anyRequest().authenticated()  
                .and()  
            .formLogin()  
                .loginPage("/login")  
                .permitAll()  
                .and()  
            .logout()  
                .permitAll();  
    }  
  
    @Override  
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {  
        auth.userDetailsService(userDetailsService);  
        auth.passwordEncoder(passwordEncoder());  
    }  
  
    @Bean  
    public PasswordEncoder passwordEncoder() {  
        return new BCryptPasswordEncoder();  
    }  
}

在最后的代码中,我们用到了BCrypt,它是一款加密工具,可以比较方便地实现数据的加密工作。也可以简单理解为它内部自己实现了随机加盐处理。那它和MD5加密有什么区别呢?

使用MD5加密,每次加密后的密文其实都是一样的,这样就方便了MD5通过大数据的方式进行破解。

BCrypt生成的密文长度是60,而MD5的长度是32。

现在,我们启动项目,当用户尝试登录时,Spring Security将调用我们提供的JdbcUserDetailsService实现来验证用户凭据。这个实现使用JDBC从数据库中查询用户信息,并且返回给Spring Security进行验证。如果用户名和密码匹配,用户将被成功认证,并获得访问应用程序的权限。

文章到这里就先结束了,后续会继续分享相关的知识点。

【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现,云原生系列--微服务,spring,springcloud,微服务,安全架构文章来源地址https://www.toymoban.com/news/detail-855634.html

到了这里,关于【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Spring Boot系列】-Spring Boot过滤器Filter

    **Filter(过滤器) 可以理解为经过一层次的过滤处理才达到使用的要求,而其实 Filter(过滤器) 就是服务器与客户端请求与响应的中间层组件,在实际项目开发中 Filter(过滤器)**主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。 **Filter(过滤器

    2024年02月13日
    浏览(51)
  • Spring Cloud Gateway 过滤器详解

    Spring Cloud Gateway根据作用范围划分为:GatewayFilter和GlobalFilter 由filter工作流程点,可以知道filter有着非常重要的作用,在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输

    2023年04月08日
    浏览(39)
  • Spring Cloud Gateway过滤器GlobalFilter详解

    一、过滤器的场景 在springCloud架构中,网关是必不可少的组件,它用于服务路由的转发。对客户端进行屏蔽微服务的具体细节,客户端只需要和网关进行交互。所以网关顾名思义,就是网络的一个关卡。它就是一座城的城门守卫。所以这个守卫就可以做很多工作,比如对来访

    2024年02月14日
    浏览(41)
  • Spring Cloud Gateway GlobalFilter(全局过滤器)详解(官方原版)

    GlobalFilter接口具有与GatewayFilter相同的签名。这些是有条件地应用于所有路由的特殊过滤器。 当请求与路由匹配时,过滤web处理程序会将GlobalFilter的所有实例和GatewayFilter的所有路由特定实例添加到过滤器链中。这个组合过滤器链由org.springframework.core.Ordered接口排序,您可以通

    2024年02月09日
    浏览(44)
  • 【Spring】Springboot过滤器Filter和拦截器Inteceptor详解及使用场景

    Springboot过滤器Filter和拦截器Inteceptor详解及使用场景

    2024年02月13日
    浏览(44)
  • spring boot过滤器实现项目内接口过滤

    由于业务需求,存在两套项目,一套是路由中心,一套是业务系统. 现在存在问题是,路由中心集成了微信公众号与小程序模块功能,业务系统部署了多套服务. 现在需要通过调用路由中心将接口重新路由到指定的业务系统中 将小程序,公众号用户信息与业务系统做绑定 将路由中心的

    2023年04月20日
    浏览(49)
  • Spring Cloud Gateway 过滤器

    Spring Cloud Gateway 过滤器的种类有30多种。 官文文档地址: Spring Cloud Gateway https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories Spring Cloud Gateway大体可以分为下面两种类型的过滤器: 1、内置的过滤器         1.1、内置的局部过滤器         1.2、内置的全

    2024年03月28日
    浏览(59)
  • Spring boot 中的过滤器

    `javax.servlet.Filter`接口定义了几个方法: 其中一些经常在过滤器的实现中使用。以下是常用的几个方法: 1. `doFilter()`: 这是过滤器的核心方法,用于实现过滤器的逻辑。在该方法中,您可以对请求进行预处理、修改请求参数、验证身份、记录日志等操作,然后通过调用`Filter

    2024年02月12日
    浏览(40)
  • Spring Cloud GateWay 全局过滤器

    这是一个自定义的 Spring Cloud Gateway 全局过滤器(Global Filter)。在 Spring Cloud Gateway 中,全局过滤器可以在请求被路由到目标服务之前或之后执行一些操作。这个过滤器实现了 GlobalFilter 接口和 Ordered 接口,这两个接口的作用如下: GlobalFilter 接口: 这是一个 Spring Cloud Gateway 提

    2024年02月11日
    浏览(46)
  • 【Spring Cloud】深入探索统一网关 Gateway 的搭建,断言工厂,过滤器工厂,全局过滤器以及跨域问题

    在微服务架构中,网关是至关重要的组件,具有多重职责,为整个系统提供了一系列关键功能。从下面的微服务结构图中,我们可以明确网关的几项主要作用: 微服务结构图: 请求过滤与安全: 用户的所有请求首先经过网关,这使得网关成为系统的第一道防线。通过对传入

    2024年02月07日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包