SpringBoot——静态资源被拦截的问题解决方法

前几天遇到一个问题,百思不得其解:
当controller跳转到页面的时候,会自动给静态资源加上控制器的@RequestMapping前缀,导致静态资源最后报404找不到的错误。

解决办法:

在类中写一个拦截器,让过滤器能忽略静态资源!

package com.wjh.interceptor;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurationSupport {

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }

    @Override
    protected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

### Spring Boot 中实现静态文件访问加密的方式 在 Web 应用开发中,保护静态文件的访问权限并对其进行加密处理是一项重要的安全措施。以下是基于 Spring Boot 的一种实现方案。 #### 1. 添加必要的依赖项 为了实现静态文件的加密和解密功能,需要引入 `Spring Security` 和其他可能涉及的加密库(如 AES)。确保项目的 `pom.xml` 文件中包含以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- 如果使用AES加密 --> <dependency> <groupId>io.github.ultrajson</groupId> <artifactId>ultrajson</artifactId> <version>2.4.0</version> </dependency> ``` 上述配置提供了基本的安全框架以及用于加密操作的支持工具[^1]。 --- #### 2. 定义自定义注解与拦截器 创建一个自定义注解来标记哪些接口需要进行参数加解密处理。例如,在后端服务中可以这样定义: ```java import java.lang.annotation.*; @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface SecurityParameter { /** * 是否对入参进行解密,默认开启 */ boolean inDecode() default true; /** * 是否对出参进行加密,默认开启 */ boolean outEncode() default true; } ``` 接着编写对应的拦截逻辑以完成请求数据的自动加解密工作[^3]。 --- #### 3. 配置静态资源路径及其过滤规则 通过设置特定 URL 路由模式匹配到受控目录下的文件夹位置,并结合前面提到的方法限制未授权用户的非法获取行为。下面展示了一种典型的例子——利用 Spring Security 来管理这些受限区域内的对象读取权限验证流程的一部分代码片段如下所示: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/protected/**").authenticated() // 受限于登录后的用户才能访问 /protected 下的所有内容 .anyRequest().permitAll(); // 对其余公开部分做额外约束 http.csrf().disable(); } @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } } ``` 此段脚本主要负责区分普通浏览者同已认证身份之间差异的同时也关闭了跨站点伪造请求防护机制以便测试阶段更加灵活调整策略。 --- #### 4. 实施实际的数据转换过程 (可选步骤取决于具体需求场景而定) 如果希望进一步增强保密等级,则可以在返回给前端之前先将目标文档本身经过一轮编码后再发送出去;同样道理接收到来自外部提交过来的信息之后也要记得还原原始形态再做后续解析动作才行哦! 对于简单的字符串类型的字段可以直接调用内置函数搞定就好啦~比如采用 Base64 编码形式的话就显得特别方便快捷呢~ 示例演示如下 : ```java // 假设这是某个 Controller 方法内部的一小节... String originalText = "这是一个秘密消息"; byte[] encodedBytes = Base64.getEncoder().encode(originalText.getBytes()); System.out.println("Encoded String : " + Arrays.toString(encodedBytes)); // 当然反过来也是成立滴~ byte[] decodedBytes = Base64.getDecoder().decode(encodedBytes); System.out.println("Decoded String : " + new String(decodedBytes)); ``` 当然除了基础版之外还有更高级别的算法可供选用比如说刚才提及过的 AES 对称秘钥体系等等. 另外值得一提的是当涉及到云端存储解决方案之时亚马逊 AWS 提供的服务包里面已经集成了相当完善的保障措施其中包括但限于传输途中以及静止状态下的双重保险机制再加上细粒度的历史版本追踪记录等功能模块共同构成了全方位立体化的防御堡垒从而有效降低了潜在风险发生的可能性[^4]. --- ### 总结说明 综上所述我们可以看出在整个 springboot 架构下要达成针对某些特殊类别资料实施针对性更强同时也更为严密有效的管控并非难事只需按照既定套路依次执行即可轻松搞定哟! ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值