SpringBoot - 如何通过WebSecurityConfigurerAdapter实现自定义安全策略?

WebSecurityConfigurerAdapter详解 本文来详细说下security中的WebSecurityConfigurerAdapter 文章目录概述 概述 阅读详情

1. 从零开始:认识你的安全管家WebSecurityConfigurerAdapter

如果你刚开始用SpringBoot做Web开发,大概率会遇到一个头疼的问题:怎么管好我网站的安全?比如,用户登录怎么弄?哪些页面谁都能看,哪些页面必须登录?后台管理页面是不是只有管理员能进?这些问题,说白了就是身份认证(你是谁)和授权(你能干什么)。Spring Security这个框架就是专门来解决这些问题的,但它本身配置起来有点复杂,就像给你一盒乐高零件,你得自己琢磨怎么拼。

这时候,WebSecurityConfigurerAdapter 这个类就登场了。你可以把它想象成Spring Security官方给你准备好的一个“安全配置样板间”。这个样板间里,基础的墙、门窗(也就是默认的安全规则)都已经给你搭好了。比如,它会默认要求所有请求都需要认证,给你一个简单的登录页面。但你的房子(也就是你的应用)肯定不能跟样板间一模一样,你想把门换个位置,或者给某个房间加把特殊的锁,这就需要“装修”了。

WebSecurityConfigurerAdapter 就是让你来“装修”这个安全样板间的。它本身是一个抽象类,你不能直接new它,而是需要你创建一个新的类去继承它。继承之后,你就拥有了重写(Override)它里面几个关键方法的能力,通过重写这些方法,你就能告诉Spring Security:“嘿,别全按你默认的来,这块儿我得按我的规矩办。”

我刚开始用的时候,觉得这名字又长又拗口,后来拆开看就明白了。WebSecurity是“网页安全”,Configurer是“配置器”,Adapter是“适配器”。合起来就是一个“用于配置网页安全的适配器”。它的核心使命,就是让你能以一种相对统一和方便的方式,去自定义整个应用的安全策略。你不用去直接操作那些底层复杂的安全过滤器链,而是通过重写几个清晰的方法来达到目的,这对我们开发者来说,友好太多了。

那么,具体我们能“装修”哪些部分呢?主要就是通过重写三个名字都叫 configure 的方法,但它们接受的参数不同,管的事儿也完全不一样。接下来,我们就一个个房间进去看看,到底怎么装修。

2. 核心装修指南:三大configure方法详解

当你创建了一个继承自 WebSecurityConfigurerAdapter 的配置类(通常我们会用 @Configuration 和 @EnableWebSecurity 注解来标记它),你的主要工作就是和这三个 configure 方法打交道。它们就像是控制安全系统的三个不同面板,每个面板负责一个独立的区域。

2.1 人员登记处:configure(AuthenticationManagerBuilder auth)

这个方法管的是 “身份认证”,也就是解决“你是谁”的问题。AuthenticationManagerBuilder 是一个工具类,专门用来构建认证管理器。你可以在这里告诉Spring Security:当用户输入用户名和密码时,去哪里查这个用户的信息(比如数据库),以及用什么规则去校验密码。

最常用、最推荐的方式是结合我们自己的用户服务(UserDetailsService)和密码编码器(PasswordEncoder)来配置。我举个例子,假设我们用户信息都存在数据库里:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService; // 这是你自己实现的从数据库加载用户的类

    @Bean
    public PasswordEncoder passwordEncoder() {
        // 返回一个密码编码器,这里用的是BCrypt强哈希加密
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService)
            .passwordEncoder(passwordEncoder());
    }
}

这段代码干了啥呢?它建立了一套认证流程:

  1. 用户登录时,Spring Security会调用我们提供的 userDetailsService 去数据库根据用户名查找用户。
  2. 找到用户后,会用我们提供的 passwordEncoder(这里是BCryptPasswordEncoder)对用户输入的密码进行编码,然后和数据库里存储的已编码的密码进行比对。
  3. 如果匹配成功,就认为认证通过。

这里有个我踩过的坑:密码编码器必须配置,而且要和存储密码时用的编码器一致。如果你数据库里存的密码是明文,这里却配了BCryptPasswordEncoder,那永远也登录不成功。现在基本没人存明文密码了,所以一开始就统一用BCryptPasswordEncoder,它在注册用户时对密码加密,在登录时用它来校验,非常安全方便。

2.2 公共区域管理:configure(WebSecurity web)

这个方法管的是 “全局安全过滤”,它影响的是Spring Security安全过滤器链之前的层面。你可以把它理解为对静态资源或者一些完全不需要安全控制的请求路径开“绿色通道”。

WebSecurity 对象允许你配置一些“忽略”规则。被忽略的资源将完全绕过Spring Security的所有过滤器,包括认证、授权等,就像它们不存在于这个安全体系内一样。这能显著提升性能,因为静态文件(如图片、CSS、JS)就不需要经过复杂的安全检查了。

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring()
       .antMatchers("/css/**", "/js/**", "/images/**", "/webjars/**", "/favicon.ico");
}

上面这段配置,就告诉Spring Security:所有以 /css/, /js/, /images/ 开头的请求,以及 /webjars/** 和 /favicon.ico 这个图标文件,统统放行,别管它们。这样,用户访问你的网站首页时,加载样式表和脚本的速度会快很多。

注意:这里用的是 antMatchers,它支持通配符。和下一个方法里的 antMatchers 作用类似,但语境不同。在这里配置的路径,完全不会经过安全过滤器。

2.3 精细权限控制室:configure(HttpSecurity http)

这是最核心、最常用的方法,负责配置基于请求的、精细化的安全策略。它定义了不同URL的访问权限、登录注销行为、防止跨站请求伪造(CSRF)等一大堆东西。HttpSecurity 提供了流式API(就是那种点.连接的方式),配置起来像搭积木。

我们来看一个比较完整的例子,它模拟了一个常见后台管理系统的安全需求:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        // 1. 授权配置:定义哪些路径需要什么权限
        .authorizeRequests()
            .antMatchers("/", "/home", "/api/public/**").permitAll() // 首页、公开API允许所有人访问
            .antMatchers("/user/**").hasAnyRole("USER", "ADMIN") // 用户功能需要USER或ADMIN角色
            .antMatchers("/admin/**").hasRole("ADMIN") // 后台管理仅限ADMIN角色
            .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')") // 更复杂的组合条件
            .anyRequest().authenticated() // 其他所有请求都需要登录(不限角色)
            .and()
        // 2. 表单登录配置
        .formLogin()
            .loginPage("/login") // 自定义登录页面路径
            .loginProcessingUrl("/doLogin") // 表单提交的路径
            .defaultSuccessUrl("/dashboard") // 登录成功后默认跳转的路径
            .permitAll() // 登录页面和登录处理URL允许所有人访问
            .and()
        // 3. 退出登录配置
        .logout()
            .logoutUrl("/logout") // 退出登录的URL
            .logoutSuccessUrl("/login?logout") // 退出成功后跳转的页面
            .permitAll()
            .and()
        // 4. 记住我功能
        .rememberMe()
            .tokenValiditySeconds(86400) // 记住我有效期为1天
            .and()
        // 5. 异常处理
        .exceptionHandling()
            .accessDeniedPage("/access-denied") // 权限不足时跳转的页面
            .and()
        // 6. 禁用CSRF(根据情况选择,API项目常禁用)
        .csrf().disable();
}

我们来拆解一下这个配置:

  • authorizeRequests() 开始了授权规则的配置。后面的 antMatchers 用来匹配URL模式,紧跟着的方法如 permitAll(), hasRole() 等则指定了访问该模式所需的权限。规则的顺序很重要,Spring Security会按你写的顺序从上到下匹配,一旦匹配上就不再继续往下看了。所以通常会把最具体的规则放前面,最通用的(如 anyRequest())放最后。
  • formLogin() 配置了基于表单的登录。如果你不指定 loginPage,Spring Security会提供一个默认的丑丑的登录页。指定后,当用户访问受保护的资源时,会被重定向到你自定义的 /login 页面。
  • logout() 配置退出。
  • rememberMe() 开启了“记住我”功能,用户关闭浏览器再打开,在一定时间内无需重新登录。
  • exceptionHandling() 用来处理认证或授权过程中出现的异常,比如 AccessDeniedException(访问被拒绝)。
  • csrf().disable() 禁用了CSRF防护。对于前后端分离、使用JWT等无状态认证的API项目,通常需要禁用,否则POST等请求会失败。但对于传统的服务端渲染应用,建议保持开启以增加安全性。

这个方法的灵活性极高,几乎你能想到的所有HTTP请求层面的安全控制,都能在这里完成。

3. 实战进阶:打造一个JWT保护的后端API

现在很多项目都是前后端分离的,用Session-Cookie那套机制会有点麻烦,尤其是涉及到跨域的时候。这时候,JWT(JSON Web Token) 就成了一个非常流行的选择。结合 WebSecurityConfigurerAdapter,我们可以轻松实现一个基于JWT的无状态API安全方案。

这个方案的核心思路是:用户用用户名密码登录成功后,服务器生成一个JWT令牌返回给前端。前端后续的每次请求,都在HTTP头里带上这个令牌(通常是 Authorization: Bearer <token>)。服务器端则用一个自定义的过滤器来校验这个令牌,如果校验通过,就认为用户已认证。

3.1 第一步:创建JWT工具类

首先,我们需要一个生成和解析JWT的工具。这里我用 jjwt 库来举例。

@Component
public class JwtTokenUtil {
    private final String secret = "your-secret-key"; // 密钥,要足够复杂且保密
    private final long expiration = 86400000L; // 令牌有效期,这里设24小时

    // 生成Token
    public String generateToken(String username) {
        Date now = new Date();
        Date expiryDate = new Date(now.getTime() + expiration);

        return Jwts.builder()
                .setSubject(username) // 主题,通常放用户名
                .setIssuedAt(now) // 签发时间
                .setExpiration(expiryDate) // 过期时间
                .signWith(SignatureAlgorithm.HS512, secret) // 签名算法和密钥
                .compact();
    }

    // 从Token中获取用户名
    public String getUsernameFromToken(String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(secret)
                .parseClaimsJws(token)
                .getBody();
        return claims.getSubject();
    }

    // 验证Token是否有效
    public boolean validateToken(String token, String username) {
        final String tokenUsername = getUsernameFromToken(token);
        return (tokenUsername.equals(username) && !isTokenExpired(token));
    }

    private boolean isTokenExpired(String token) {
        Date expiration = Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody().getExpiration();
        return expiration.before(new Date());
    }
}

3.2 第二步:创建自定义的JWT认证过滤器

这个过滤器要放在Spring Security的过滤器链中,在用户认证之前执行。它负责从请求头中提取JWT,验证其有效性,如果有效,就创建一个 Authentication 对象并设置到安全上下文中。

@Component
public class JwtAuthenticationFilter extends OncePerRequestFilter {

    @Autowired
    private JwtTokenUtil jwtTokenUtil;
    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void doFilterInternal(HttpServletRequest request,
                                    HttpServletResponse response,
                                    FilterChain chain) throws ServletException, IOException {
        // 1. 从请求头获取Token
        String authHeader = request.getHeader("Authorization");
        String token = null;
        String username = null;

        if (authHeader != null && authHeader.startsWith("Bearer ")) {
            token = authHeader.substring(7); // 去掉"Bearer "前缀
            try {
                username = jwtTokenUtil.getUsernameFromToken(token);
            } catch (Exception e) {
                logger.error("无法从JWT令牌中解析用户名", e);
            }
        }

        // 2. 如果Token有效,且当前安全上下文没有认证信息
        if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
            UserDetails userDetails = this.userDetailsService.loadUserByUsername(username);
            // 验证Token是否对该用户有效
            if (jwtTokenUtil.validateToken(token, userDetails.getUsername())) {
                // 3. 创建UsernamePasswordAuthenticationToken,这是Spring Security认识的认证对象
                UsernamePasswordAuthenticationToken authentication =
                        new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
                authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
                // 4. 将认证信息设置到安全上下文中
                SecurityContextHolder.getContext().setAuthentication(authentication);
            }
        }
        // 5. 继续执行过滤器链
        chain.doFilter(request, response);
    }
}

3.3 第三步:配置SecurityConfig,集成JWT过滤器

最后,在我们的 SecurityConfig 类中,需要做几件事:

  1. 禁用Session(因为是无状态的)。
  2. 禁用CSRF(API项目通常不需要)。
  3. 将我们自定义的 JwtAuthenticationFilter 添加到过滤器链中合适的位置(通常是在处理用户名密码登录的过滤器之前)。
  4. 配置哪些路径是公开的(如登录接口),哪些是受保护的。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private JwtAuthenticationFilter jwtAuthenticationFilter;
    @Autowired
    private UserDetailsService userDetailsService;

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // 禁用CSRF和Session
            .csrf().disable()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            // 授权规则
            .authorizeRequests()
            .antMatchers("/api/auth/login", "/api/auth/register").permitAll() // 登录注册公开
            .antMatchers("/api/public/**").permitAll() // 公开API
            .antMatchers("/api/admin/**").hasRole("ADMIN")
            .anyRequest().authenticated() // 其他所有API都需要认证
            .and()
            // 添加JWT过滤器
            .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
    }

    // 可选:如果你需要直接使用AuthenticationManager(比如在登录Controller里),可以把它暴露为Bean
    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
}

这样,一个基于JWT的API安全骨架就搭建好了。前端在登录接口获取到Token后,后续请求只需在Header中携带,后端就能自动识别用户身份和权限。这种方式清晰、无状态,非常适合现代分布式应用。

4. 避坑指南与最佳实践

用了这么多年 WebSecurityConfigurerAdapter,我也踩过不少坑,总结了一些经验,希望能帮你少走弯路。

配置顺序的坑:前面提过,HttpSecurity 中 authorizeRequests() 的规则是顺序敏感的。我曾经犯过一个错误,把 anyRequest().authenticated() 这行放在了最前面,结果导致后面定义的 permitAll() 规则全部失效,所有请求都要求登录。切记,具体的规则放前面,通用的规则放最后。

密码编码器的坑:这是新手最高频的问题。如果你在 configure(AuthenticationManagerBuilder auth) 方法里配置了 passwordEncoder,那么你在用户注册、修改密码时,存入数据库的密码也必须用同一个编码器进行加密。我建议在Service层里注入这个 PasswordEncoder Bean来用,保证全局一致。Spring Security 5之后,不配置编码器会报错,强制你考虑密码安全。

静态资源被拦截的坑:明明在 configure(WebSecurity web) 里忽略了 /static/**,但访问CSS文件还是跳转到登录页?检查一下你的路径。ignoring() 里的路径是相对于应用上下文的。更稳妥的做法是,如果你用了Spring Boot的默认静态资源位置(classpath:/static/, classpath:/public/等),也可以在 HttpSecurity 的 authorizeRequests() 里用 .antMatchers(HttpMethod.GET, "/**/*.css", "/**/*.js").permitAll() 来放行,但前者性能更好。

多个安全配置类的坑:一个项目里只能有一个继承 WebSecurityConfigurerAdapter 的配置类生效吗?不是的。你可以有多个,但你需要用 @Order 注解来指定它们的优先级(Order值越小,优先级越高)。高优先级的配置会先被应用,但要注意规则可能会被覆盖。对于大多数应用,一个配置类就足够了。如果你需要为不同的URL模式(比如 /api/** 和 /admin/**)配置完全不同的安全规则,才考虑拆分。

关于方法过时的说明:在Spring Security 5.7及以后版本,WebSecurityConfigurerAdapter 已经被标记为过时(Deprecated)。官方推荐使用基于组件的安全配置。但这并不意味着你现有的代码立刻不能用了,它仍然完全有效。新的方式更像是一种“函数式”的配置风格,用 SecurityFilterChain Bean来替代。如果你是新项目,可以尝试学习新的方式;如果是老项目维护,沿用 WebSecurityConfigurerAdapter 也完全没有问题,社区有大量的资料和案例。理解了这个适配器的核心思想——即如何配置认证、全局忽略和请求授权,再过渡到新方式会非常容易。

最后,安全无小事。在自定义安全策略时,一定要清楚每一条规则的目的。对于生产环境,除了基础的认证授权,还要考虑HTTPS、安全的HTTP头(如CSP, HSTS)、定期更新依赖以修复安全漏洞等更广泛的安全实践。WebSecurityConfigurerAdapter 是你构建应用安全防线的强大工具,用好它,你的SpringBoot应用就拥有了坚实的第一道门。

工业视觉中HDR算法的动态范围优化与Debevec/Mertens方法实践 本文深入探讨了工业视觉中HDR(高动态范围)成像技术,重点解析了Debevec和Mertens两种核心算法。针对工业场景中因动态范围不足导致的过曝与欠曝问题,文章详细对比了两种方法的原理、实现步骤、参数调优及适用场景,为工程师在静态检测与高速产线等不同需求下,选择并实践HDR算法提供了清晰的指导。 阅读详情

相关推荐

面板数据门槛归回分析,xthreg的安装,xthreg2安装包

我用的是Stata17,数据是不平衡的面板数据,需要用到xthreg2,虽然我找到了xthreg2.ado,但是还需要安装xthreg,因为运行xthreg2需要xthreg包顺带安装的lxthreg.mlib文件。但是!我后来发现还是不行,最后是去买了一个真正能用到xthreg2的lxthreg.mlib文件,才可以运行。

weixin_55252589的博客 1万+

SpringBoot - WebSecurityConfigurerAdapter的作用是什么?

Spring Security提供了一个抽象类WebSecurityConfigurerAdapter,它实现了默认的认证和授权,允许用户自定义一个WebSecurity类,重写其中的三个configure来实现自定义的认证和授权。

记录并分享 6633

金蝶ERP元数据解析:字段属性与表结构映射实战

本文深入解析金蝶ERP元数据的核心价值与应用实践,详细介绍了字段属性与表结构映射的关键技术。通过缓存获取与工具类直连两种方案对比,结合实际案例展示元数据在数据库校验、动态表单生成等场景的应用,帮助开发者高效解决二次开发中的常见问题。

weixin_33738555的博客 433

关于Spring Boot 2.7后WebSecurityConfigurerAdapter的过期问题,SpringSecurity的最新最全配置

进入springboot 2.7 后,一个重要的类WebSecurityConfigurerAdapter过期了。

m0_61346425的博客 3270

保姆级教程:在紫光同创Titan2 FPGA上实现PCIe DMA,实测带宽接近理论极限

本文详细介绍了在紫光同创Titan2 FPGA上实现PCIe DMA性能调优的全过程,通过参数优化和架构设计,实测带宽达到6.91GB/s,接近理论极限。涵盖开发环境搭建、PCIe IP核定制、DMA引擎设计、驱动开发及性能调优等关键步骤,为FPGA开发者提供实用指南。

weixin_30954817的博客 335

基于ROS2系统开发机器人

以上是基于ROS 2开发机器人的基本流程和一个简单的发布者-订阅者示例。通过这个流程,你可以逐步扩展和优化你的机器人系统,实现更复杂的功能。

xuweilin的博客 1495

浅谈 SpringSecurity使用方式——WebSecurityConfigurerAdapter的三大方法(二)

上一章节我们简单介绍了SpringSecurity使用方式及自动配置原理,这一节我们会着重阐述SpringSecurity的配置,并且会基于配置类WebSecurityConfigurerAdapter的三个方法的使用方式及原理向大家介绍 2.4、基于配置类WebSecurityConfigurerAdapter 创建 WebSecurityConfig配置类,继承 WebSecurityConfigurerAdapter抽象类,实现 Spring Security在 Web 场景下的自定义配置。 @Con

小爽帅到拖网速的博客 1万+

Mac---安装Navicat

把这个填充好的字符串放入刚才打开的RSA在线加解密的网站中的第二个框框(替换之前的请求码),第一个框框不动(还是之前第10步骤中的私钥),点击RSA私钥加密,这时会得到一个加密的字符串,这个就是激活码。{“K”:“你的K值”, “N”:“52pojie”, “O”:“52pojie.cn”, “DI”:“你的DI值”, “T”:你的时间戳}链接: https://pan.baidu.com/s/1mEVY4hnKdktg-p7DBIfD7A 提取码: twwg。Navicat会弹出一个对话框,点击“注册”

weixin_53970868的博客 1万+

【Spring Security】—— WebSecurityConfigurerAdapter

官网地址 Spring Security Reference 版本:Version 5.5.0 WebSecurityConfigurerAdapter 继承关系图 Adapter 谷歌翻译:n. 【机】转接器 【网络】 适配器;适配器模式;接头。通过类名了解功能:我的理解,这个类是一个Web应用安全配置“接头”,及用户可通过这个“接头”接到自己的配置,也就是用户可以利用这个类来定制化安全配置。 SecurityBuilder 接口 对这个接口暂时没有细看,先根据官网了解了一下这个接口想要实

qq_33471737的博客 4430

auto.js梦幻西游游戏脚本,梦幻西游脚本开发思路

本篇文章给大家谈谈梦幻西游脚本用什么语言写,以及auto.js梦幻西游游戏脚本,希望对各位有所帮助,不要忘了收藏本站喔。

npy199331的博客 1939

国产射频直采收发器CX8242KA JESD204C调试

杭州诚芯公司的CX8242KA是国内开发的极少数支持JESD204C接口的高速AD、DA,Serdes具备支持接收和发送,并且速率可以到25Gbps,在国内属于领先水平。250M参考时钟输入,AD采样率2.5G,DA采样率10G,3收2发,主通道模式4,反馈通道模式1,基带采样率1250M,线速率20.625G,收发同时配置混频625M。CX8242KA的204C接口模式支持10种模式,在手册上都有说明。2、 支持TX信道编码,RX信道解码,提升健壮性。这里使用模式4,支持双通道模式,并且反馈开启。

RFSOC的博客 6220

史上最全SpringBoot教程,从零开始带你深入♂学习(十四)——集成SpringSecurity

Springboot(十四)——集成SpringSecurity SpringSecurity简介 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它实际上是保护基于sprin的应用程序的标准。 Spring Security是一个框架,侧重于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Spring安全性的真正强大之处在于它可以轻松地扩展以满足定制需求 Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全

爱分享的板栗老哥 255

Reactor 响应式编程(第一篇:Reactor核心)

响应式:响应式编程: 全异步、消息、事件回调默认还是用当前线程,生成整个流、发布流、流操作.log();//只要不指定线程池,默认发布者用的线程就是订阅者的线程;

moments的博客 1572

Spring Boot中基于JDBC的用户认证实践

在当今的软件开发中,用户认证是许多应用程序的核心功能之一。Spring Boot结合Spring Security提供了强大的安全框架,而JDBC认证则是其中一种灵活的认证方式。本文将通过一个完整的示例,展示如何在Spring Boot中配置基于JDBC的用户认证。一、项目依赖配置在pom.xml文件中,我们需要引入以下依赖,以支持Spring Security、Web开发、Thymeleaf视图以及JDBC操作:xml复制二、安全配置类。

m0_74337424的博客 1130

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

springboot

运行原理 什么是springboot? SpringBoot是一个快速开发框架,快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化XML配置,全部采用注解形式,内置Http服务器(Jetty和Tomcat),最终以java应用程序进行执行。 首先是通过pom.xml配置父依赖,这也使我们导入依赖时不需要写版本,但是如果导入的包没有在依赖中管理着就需要手动配置版本。 默认的主启动器 //@SpringBootApplication 来标注一个主程序类 //说明这是一个Sprin

weixin_51438023的博客 157

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SpringSecurity简单配置教程

SpringSecurity web开发中,安全第一位,过滤器,拦截器,安全应该在设计之初考虑. shiro,SpringSecurity:很像 简介 是针对Spring项目的安全框架,也是Springboot底层安全模块默认的技术选型, 他可以实行强大的web安全控制,对于安全控制我们只需要引入spring-boot-stater-security模块,进行少量的配置,即可实现欠打的安全管理 WebSecurityConfigurerAdapter:自定义Secruity策略 Authenticatio

Lazy_G的博客 522

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Spring Security 实战干货:自定义配置类入口WebSecurityConfigurerAdapter

1. 前言 今天我们要进一步的的学习如何自定义配置 Spring Security 我们已经多次提到了 WebSecurityConfigurerAdapter ,而且我们知道 Spring Boot 中的自动配置实际上是通过自动配置包下的 SecurityAutoConfiguration 总配置类上导入的 Spring Boot Web 安全配置类 SpringBootWebSecurity...

码农小胖哥 9499

Eureka Server开启安全策略,导致Eureka Client注册一直报错 Cannot execute request on any known server

Eureka Server配置文件开始安全策略的写法 security: basic: enabled: true 已经被启用了,因为版本导致的,而且官方文档也说明了,https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-security...

Lee_SmallNorth的博客 337

SpringSecurity-1-WebSecurityConfigurerAdapter抽象类与环境配置

怀念二抱三抱

文天大人 3135

Spring Security配置内容安全策略

内容安全策略:Content Security Policy,简称CSP,内容安全策略是一种安全机制,开发着可以通过HTTP 响应标头,可显著减少现代浏览器中的 XSS、Clickjacking 等代码注入攻击。CSP通过W3C WebApplication Security Working Group发布标准

Nicky's blog 7453

Spring Security及若依安全实现,Java小白入门(九)

Spring Security 最早叫 Acegi Security, 这个名称并不是说它和 Spring 就没有关系,它依然是为Spring 框架提供安全支持的。Acegi Security 基于 Spring,可以帮助我们为项目建立丰富的角色与权限管理系统。Acegi security 虽然好用,但是最为人诟病的则是它臃肿烦琐的配置这一问题最终也遗传给了 Spring Security。

鸡毛掸子 1367

SpringBoot开发中关闭Security安全策略报错:Deprecated: The security auto-configuration is no longer customizable

如果在yml文件中配置 security: basic: enabled: false idea会报错:Deprecated: The security auto-configuration is no longer customizable less... (Ctrl+F1) Checks Spring Boot application .yaml configuratio...

爱笑才不是傻帽的博客 4543

SpringBoot安全配置实战:WebSecurityConfigurerAdapter的3个关键方法详解

本文深入解析了SpringBoot安全配置中WebSecurityConfigurerAdapter的三个核心configure方法。详细阐述了configure(AuthenticationManagerBuilder)负责身份认证、configure(HttpSecurity)定义访问授权与HTTP安全策略、configure(WebSecurity)用于全局资源忽略的职责边界与实战应用,帮助开发者构建灵活、安全的SpringBoot应用。

vv45678的博客 405

29-SpringBoot 安全与SpringSecurity

Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型。他可以实现强大的web安全控制。对于安全控制,我们仅需引入spring-boot-starter-security模块,进行少量的配置,即可实现强大的 安全管理。几个类: WebSecurityConfigurerAdapter:自定义Security策略 AuthenticationManagerBuilder:自定义认证策略 @EnableWebSecurity:开启WebSecurit

鸣鼓ming的博客 1249

SpringBoot整合之安全

一、安全 Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型。他可以实现强大的web安全控制。对于安全控制,我们仅需引入spring-boot-starter-security模块,进行少量的配置,即可实现强大的安全管理。 三个类: WebSecurityConfigurerAdapter:自定义Security策略 Aut...

lixinkuan的博客 482
上一篇: TensorRT Plugin从编译到部署:一个YOLOX优化案例的完整拆解
下一篇: 从CH341到串口通信:USB设备驱动与Serial层的协同剖析
寂静夜空35
博客等级 码龄3年 59粉丝 1797原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值