Spring Security从入门到精通:手把手打造安全防线(实战向)

SpringSecurity6+OAuth2.0 从入门到熟练使用 阅读详情

一、为什么你的系统总被攻击?(安全的重要性)

刚入门开发的兄弟肯定遇到过这种情况:熬夜写的接口第二天就被刷爆了!数据库莫名其妙多了几百条垃圾数据!这就是典型的安全防护缺失(血的教训啊!!!)

Spring Security作为Java生态最强大的安全框架,它能帮你:

  1. 自动拦截非法请求(比如SQL注入攻击)
  2. 灵活控制访问权限(VIP用户才能访问的接口)
  3. 无缝对接OAuth2等认证协议(第三方登录so easy)
  4. 防御CSRF、XSS等常见攻击(安全护盾自动开启)

二、5分钟极速搭建环境(小白友好版)

2.1 创建项目(Spring Initializr大法好)

访问 start.spring.io 勾选:

  • Spring Web
  • Spring Security
  • Lombok(可选但推荐)

点击生成按钮下载zip包,用IDE导入即可(我用的是IntelliJ IDEA)

2.2 基础配置(代码直接复制可用)

在SecurityConfig.java中添加:

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public/**").permitAll()
                .anyRequest().authenticated()
            )
            .formLogin(form -> form
                .loginPage("/login")
                .permitAll()
            );
        return http.build();
    }
}

(重点解读)这个配置实现了:

  • 开放/public/**路径的匿名访问
  • 其他请求需要登录认证
  • 自定义登录页地址为/login

三、认证 vs 授权(必知必会的核心概念)

3.1 认证(Authentication)—— 你是谁?

就像进小区要刷卡,系统需要确认用户身份。常见方式:

  • 表单登录(最基础)
  • 手机验证码登录
  • 指纹/人脸识别(生物认证)
  • JWT令牌(无状态认证)

3.2 授权(Authorization)—— 你能干什么?

确定身份后,还要限制操作权限。比如:

  • 普通用户只能查看数据
  • 管理员可以删除数据
  • 财务只能访问报销模块

实现方式示例:

// 在Controller方法上添加注解
@PreAuthorize("hasRole('ADMIN')")
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
    // 删除逻辑
}

四、实战:保护REST API(手写JWT方案)

4.1 添加JWT依赖

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.5</version>
</dependency>

4.2 自定义过滤器

public class JwtFilter extends OncePerRequestFilter {
    
    @Override
    protected void doFilterInternal(HttpServletRequest request, 
                                    HttpServletResponse response,
                                    FilterChain chain) throws IOException, ServletException {
        String token = request.getHeader("Authorization");
        if (token != null && token.startsWith("Bearer ")) {
            // 解析token并设置认证信息
            Authentication auth = parseToken(token.substring(7));
            SecurityContextHolder.getContext().setAuthentication(auth);
        }
        chain.doFilter(request, response);
    }
    
    private Authentication parseToken(String token) {
        // 实际需要实现JWT解析逻辑
        return new UsernamePasswordAuthenticationToken(user, null, authorities);
    }
}

4.3 安全配置升级

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .csrf().disable() // 关闭CSRF(仅演示用,生产环境要开启)
        .addFilterBefore(new JwtFilter(), UsernamePasswordAuthenticationFilter.class)
        .authorizeHttpRequests(auth -> auth
            .requestMatchers("/api/auth/**").permitAll()
            .anyRequest().authenticated()
        );
    return http.build();
}

五、常见踩坑指南(避雷专用)

5.1 循环依赖问题

当自定义UserDetailsService时,可能会遇到:

┌─────┐
|  securityConfig (field com.example.service.UserService)
↑     ↓
|  userService (field org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration)
└─────┘

解决方法:使用@Lazy注解延迟加载

5.2 权限注解失效

确保在启动类添加@EnableGlobalMethodSecurity(prePostEnabled = true)

5.3 密码存储的坑

绝对不要明文存储密码!!!使用BCrypt加密:

PasswordEncoder encoder = new BCryptPasswordEncoder();
String encodedPwd = encoder.encode("123456"); 

六、高阶玩法扩展(装逼必备)

6.1 OAuth2社交登录

集成微信/微博/GitHub登录:

@Bean
public ClientRegistrationRepository clientRegistrationRepository() {
    return new InMemoryClientRegistrationRepository(
        ClientRegistration.withRegistrationId("wechat")
            .clientId("your-appid")
            .clientSecret("your-secret")
            .scope("snsapi_login")
            .authorizationUri("https://open.weixin.qq.com/connect/qrconnect")
            .tokenUri("https://api.weixin.qq.com/sns/oauth2/access_token")
            .userInfoUri("https://api.weixin.qq.com/sns/userinfo")
            .clientName("微信")
            .build()
    );
}

6.2 动态权限控制

从数据库读取权限规则:

@Override
protected void configure(HttpSecurity http) throws Exception {
    List<Permission> permissions = permissionService.getAll();
    http.authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .antMatchers(HttpMethod.GET, "/api/**").access("@rbacService.check(authentication,request)");
}

七、学习路线推荐(少走弯路版)

  1. 官方文档:Spring Security Reference(必读)
  2. 实战书籍:《Spring Security实战》(电子工业出版社)
  3. 视频教程:B站搜索"Spring Security OAuth2精讲"
  4. 项目实战:尝试搭建包含RBAC权限管理+JWT+OAuth2的完整系统

(终极建议)不要停留在理论层面!建议边学边做项目,遇到问题直接Google error message,你会发现90%的问题都有现成解决方案。安全领域需要持续学习,新的攻击手段层出不穷,防御方案也要与时俱进。祝各位早日成为安全大佬!

Spring Boot Security 实战指南:从零开始构建安全可靠的应用 本文从零开始,介绍了如何在 Spring Boot 应用中集成 Spring Security,实现了用户认证和权限控制等核心安全功能。Spring Boot Security 功能强大,配置灵活,是构建安全可靠应用的强大后盾。下一步学习建议:官方文档是学习 Spring Security 最权威的资料。例如 OAuth2, JWT, LDAP 等。例如 ACL, RBAC 等。例如 CSRF 防护, HTTPS, 攻击防护等。希望这篇文章对您有所帮助! 阅读详情

相关推荐

Spring Security自定义过滤器:3大核心+5个实战技巧,拦截99%的攻击!

文章摘要: 本文深度解析Spring Security自定义过滤器的实战应用,针对安全防护被绕过的痛点,提出构建立体防护体系的方案。通过3大核心组件(过滤器链位置、请求特征挖掘、熔断机制)和5个实战技巧(多层过滤、动态规则、智能拦截等),结合电商案例展示拦截率从30%提升至99%的优化效果。特别强调开发中的10个避坑细节,并引入AI驱动的智能拦截系统,实现攻击溯源时间从3小时缩短至15分钟。最终解决安全与性能的平衡难题,为开发者提供从原理到落地的完整防护策略。

java专栏 1014

Spring Security从入门到精通:手把手构建安全防线(实战向)

永远不要在前端明文显示异常信息(如"用户不存在"这种提示)定期扫描依赖漏洞(使用OWASP Dependency-Check)生产环境必须禁用Actuator敏感端点密码策略要包含最小长度+复杂度要求关键操作必须二次验证(短信/邮件验证码)最近在帮某银行重构系统时,我们发现一个低级但致命的漏洞:因为开发人员图方便,在忘记密码接口使用手机号后四位作为临时密码(震惊!这种安全意识的缺失,往往比技术漏洞更可怕。安全开发就像给系统穿盔甲——既要足够坚固,又不能影响灵活性。

zhangzelin888的博客 1051

Spring Security 7中的JWT认证全解析:从零搭建安全API的完整流程

本文全面解析了如何在Spring Security 7中实现JWT认证,从基础概念到完整API安全搭建流程。详细介绍了JWT核心组件实现、认证端点开发以及生产环境最佳实践,帮助开发者构建安全可靠的RESTful API。特别针对Spring Security 7的新特性进行了深入探讨。

weixin_26789847的博客 379

Spring Security

本书聚焦Spring Security框架在企业级应用中的实践,系统解析其核心架构与安全机制,适用于具备Spring Boot基础的开发人员及教学场景。spring security 5.1 中文 参考手册 中文文档.pdf。《Spring Security原理与实战》是由郑天民编著。Spring Security5 反应式应用实用指南。《Spring security 快速入门》《深入浅出Spring Security》Spring Security 中文文档。Spring Security原理与实战。

abc 528

API 接口裸奔?Spring Security OAuth2 + JWT + 签名验签,打造金融级的接口安全护盾

很多同学觉得:“我上了 HTTPS,数据就是加密传输的,很安全。错!HTTPS 只能防止数据在传输链路中间人攻击(MITM):如果客户端被植入根证书,HTTPS 一样被抓包。重放攻击:黑客截获你的请求,虽然解不开,但他可以把这个请求重复发送 100 次(比如转账接口)。参数篡改:黑客修改了转账金额,而服务端只认 Token,不校验金额是否被改过。要达到金融级安全,我们需要“三道防线”。我们将上述逻辑封装在一个 Filter 中,放在 Spring Security 过滤器链的上游。

BUG猿的博客 984

Spring Security自定义过滤器实战:打造你的请求“安检门”!

本文介绍了如何利用Spring Security自定义过滤器增强应用安全性,包括创建检查请求头的过滤器、将其注入安全链、拦截非法请求等实战技巧。文章提供了详细的代码示例,涵盖API Key验证、敏感词检测、IP拦截等功能,并分享了白名单配置和自定义错误响应的最佳实践,帮助开发者构建更坚固的安全防线。

墨夶的博客 1342

【Spring Security】从入门到精通

内附经典案例详解~~

Le vent se lève, il faut tenter de vivre 2407

Obsidian免费同步全攻略:手把手教你用OneDrive+Remotely Save插件跨设备同步笔记

本文提供了一份详细的Obsidian免费同步方案指南,核心是利用OneDrive云存储与Remotely Save插件实现跨设备笔记同步。文章手把手教学,涵盖插件安装、OneDrive授权配置、桌面端与移动端的同步设置,并解答了常见问题,帮助用户在不依赖官方付费服务的情况下,构建稳定、自主的免费同步工作流。

bash7scripter的博客 849

手把手教你学会使用Spring Security

Spring Security 是一个强大灵活的安全框架,提供身份验证和授权功能,广泛用于保护基于 Java 的应用,特别是在 Spring 环境中。项目地址:Gitee:Spring Security 简单来说就是通过base64。

m0_74216199的博客 1165

微信DAT图片解密全攻略:一键转换JPG/PNG/GIF

本文详细解析了微信电脑版中DAT图片的加密原理与存储路径,并提供了从定位文件到使用专业工具进行一键解密的完整操作指南。通过简单的步骤,用户可将加密的DAT文件无损还原为JPG、PNG或GIF格式,有效解决无法直接查看聊天图片的难题,同时兼顾了隐私清理与磁盘空间管理。

hill8的博客 1365

分子模拟入门教程 | 低调使用 建议收藏

该方法只需要原子的核电荷和少数模拟的环境参数作为输入,所有的性质都是通过求解薛定谔方程得到的,不需要使用任何经验参数。经典的原子水平的分子模拟已经成为提高我们对材料科学和生命系统中分子过程理解的最流行的方法之一。全原子模拟是一种非常强大的以原子分辨率呈现信息的方法,因为在原子模拟中,一个粒子代表一个特定的原子。随着计算机硬件和模拟技术的快速发展,分子模拟不仅可以解决基本的、常规的化学问题,还可以应用于各种复杂体系。然而,由于问题的复杂性以及严重依赖于现象的现实情况,最好是逐案确定合适的模拟方法。

pysonger的博客 783

Spring Boot 接口安全实战:从入门到精通,打造高可用防护体系

在微服务架构盛行的今天,接口作为系统间通信的桥梁,其安全性直接决定了整个应用的安全等级。据 OWASP 2025 年报告显示,未授权访问SQL 注入跨站请求伪造(CSRF)仍是接口安全的三大核心威胁,占比高达 68%。作为一名拥有 5 年 Spring Boot 开发经验的工程师,我曾亲历因接口未做权限校验导致的用户数据泄露事故,也参与过大型电商平台的接口安全重构。本文将结合实战场景,从基础防护到高级方案,手把手教你构建一套可落地的 Spring Boot 接口安全体系。java运行。

2501_92249670的博客 536

宝骏kiwi 630 730 560 E100 E200 E300 310 510 610 330 530维修手册电路图资料线路图接线图更新

2020-2022年宝骏RS-3维修手册和电路图。2020-2022年宝骏RS-3维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2021年宝骏510维修手册和电路图。2019-2021年宝骏510维修手册和电路图。

weixin_45821055的博客 1771

Spring Security入门实战:从认证授权到数据库集成与JWT整合

在Java Web开发中,认证与授权是保障应用安全的核心机制。认证解决“你是谁”的问题,通过验证用户凭证确认身份;授权则解决“你能做什么”的问题,基于角色或权限控制资源访问。Spring Security作为Spring官方安全框架,通过可定制的安全过滤器链,为请求提供层层安检,是实现这些机制的工业级解决方案。其技术价值在于提供了高度可配置、与Spring生态无缝集成的安全能力,能有效防御未授权访问、数据泄露等风险,广泛应用于电商、金融、企业后台等需要分级权限管理的场景。本文聚焦于Spring Securi

weixin_34184561的博客 396

给STM32F103的7寸屏找个新UI:LVGL 8.2裸机移植保姆级教程(附避坑清单)

本文详细介绍了如何将LVGL 8.2裸机移植到STM32F103开发板,特别针对7寸大屏(800×480分辨率)进行优化配置。从环境准备、工程搭建到显示驱动移植、内存优化与性能调优,提供完整的解决方案和避坑清单,帮助开发者快速实现美观的用户界面。

weixin_29181861的博客 413

基于SAGE算法的宽带信道参数估计算法的MATLAB仿真

本文将介绍如何使用MATLAB进行SAGE算法的仿真,以便更好地理解和应用该算法。SAGE算法是一种基于最大期望(Expectation-Maximization)方法的迭代估计算法,用于估计未知的参数。在宽带信道参数估计中,SAGE算法通过迭代优化来估计信道的传输函数。总结起来,本文介绍了如何使用MATLAB进行基于SAGE算法的宽带信道参数提取算法的仿真。通过以上步骤,我们可以得到估计的信道响应,并与真实信道响应进行比较。此外,SAGE算法还可以与其他信道估计算法相结合,以提高估计的准确性和性能。

CodeRoarX的博客 1075

打造坚不可摧的安全防线:SpringSecurity 6.x实战学习笔记推荐

打造坚不可摧的安全防线:SpringSecurity 6.x实战学习笔记推荐 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代Web应用开发中,安全性是至关重要的。《SpringSecurity 6.x实战学习笔记》是一份详尽的指南,专为希望将安全性提升至生产级别标准的开发者设计。本笔记基于SpringBoot 3.x环境,深入讲解了SpringSecurity ...

gitblog_09785的博客 315

基于深度学习的CT图像肺结节分割与检测系统[完整代码数据分享]

基于深度学习的CT图像肺结节分割与检测系统[完整代码数据分享]

269

Spring Security PasswordEncoder源码深度解析与安全实践指南

在Web应用安全体系中,密码存储与验证是身份认证的核心环节,其原理基于密码学中的单向哈希函数。通过将用户明文密码转换为不可逆的哈希值,并引入随机盐值,可以有效抵御彩虹表攻击,确保即使数据库泄露,攻击者也难以还原原始密码。这一技术的工程价值在于为系统建立了基础的安全基线。Spring Security作为Java领域的主流安全框架,其PasswordEncoder接口正是这一原理的抽象实现,它定义了密码编码与匹配的明确契约,并内置了BCrypt、PBKDF2等多种主流算法实现,广泛应用于各类需要用户登录的企业

congsikuai0611的博客 698

黑猫带你学UFS协议第23篇:UFS固件升级操作详解(FFU)

摘要:本文介绍了UFS固件更新(FFU)的实现方法与注意事项。根据UFS3.1 JEDEC协议,FFU通过write buffer命令(MODE=0Eh)下载FW固件,随后必须进行power cycle或硬件复位生效。文章详细阐述了FFU操作的10条规则,包括数据分片传输要求、寄存器访问限制等,同时指出协议未明确的厂商实现差异。关键寄存器包括bFFUTimeout、bDeviceFFUStatus和fPermanentlyDisableFwUpdate。

黑猫奥利奥的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

《Spring Security实战:打造坚不可摧的在线购物平台》

在线购物平台的安全性直接关系到用户的个人信息和财产安全,因此,如何打造一个坚不可摧的在线购物平台成为了开发者们关注的焦点。《Spring Security实战:打造坚不可摧的在线购物平台》通过一个真实的开发案例,详细介绍了如何利用Spring Security实现用户认证、角色授权以及方法级别的细粒度控制。文章以幽默风趣的语言,将复杂的安全概念讲解得通俗易懂,让读者在轻松愉快的阅读过程中,掌握Spring Security的核心技能。这不仅是一篇技术文章,更是一份Java企业级应用安全开发的实战宝典。

Geek_H 2215

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

打造坚不可摧的安全防线:SpringSecurity 6.x实战学习笔记

打造坚不可摧的安全防线:SpringSecurity 6.x实战学习笔记 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代Web应用开发中,安全性是不可或缺的一环。《SpringSecurity 6.x实战学习笔记》是一份专为SpringBoot 3.x环境下的开发者量身定制的实战指南。无论您是初学者还是有经验的开发者,这份笔记都将帮助您深入理解并掌握Spring...

gitblog_09766的博客 437

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

AI代码审计实战:从语义理解到工具配置,打造高效安全防线

静态应用安全测试(SAST)是保障软件安全的重要环节,其核心原理是通过分析源代码或编译后的二进制文件,在不运行程序的情况下发现潜在的安全漏洞。传统SAST工具主要依赖模式匹配和规则库,虽能快速覆盖已知漏洞,但面对复杂的业务逻辑漏洞时,常因缺乏语义理解能力而导致高误报率或漏报。随着大语言模型(LLM)技术的发展,AI驱动的代码审计带来了范式转变,通过深度理解代码上下文、数据流和控制流,显著提升了发现隐蔽逻辑漏洞的精准度。这种技术革新为开发和安全团队带来了巨大价值,能够将审计人员从海量代码的重复性劳动中解放出来

weixin_30566111的博客 386

掌握Spring框架:Must Read Resources for Java Developers深度解析

Must Read Resources for Java Developers是一份专为Java开发者打造的精选学习资源库,其中包含了大量关于Spring框架的优质教程和实践指南。本文将带你深度解析这份资源库中Spring框架相关的核心内容,帮助你系统掌握Spring框架的精髓。 ## 为什么Spring框架是Java开发者的必备技能? Spring框架作为Java生态中最流行的企业级应用开发

gitblog_00620的博客 712

Spring Boot集成JWT实现API安全认证:从原理到实战

在微服务与RESTful API架构中,API安全是保障服务间通信和数据交互的基石。其核心原理在于建立一套可靠的认证与授权机制,确保请求的合法性与数据完整性。JWT(JSON Web Token)作为一种流行的无状态令牌技术,通过其自包含的三段式结构(Header、Payload、Signature)和数字签名,为分布式系统提供了高效的身份验证方案。该技术的工程价值在于实现了服务端的无状态化,简化了水平扩展,并易于跨域使用。典型的应用场景包括用户登录认证、微服务间安全调用以及前后端分离架构中的身份管理。本文

weixin_33722405的博客 361

Spring Security安全监控终极指南:构建实时威胁检测系统

Spring Security是一款强大的安全框架,为Java应用提供全面的认证和授权支持。在当今复杂的网络环境中,仅仅实现基础的安全防护已远远不够,构建实时威胁检测系统成为保障应用安全的关键环节。本文将详细介绍如何利用Spring Security的事件机制、过滤器链和监控工具,打造一套完整的安全监控解决方案,帮助开发者及时发现并应对潜在的安全威胁。 ## 一、Spring Security监

gitblog_01103的博客 879
上一篇: Python零基础入门:手把手带你打开编程新世界(附避坑指南)
下一篇: Java进化之路:从Java 8到Java 21的重要新特性(程序员必看版)
普通网友
博客等级 码龄2年 109粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值