springboot 请求转发器_spring boot 过滤请求并发送到controller

本文介绍了如何在Spring Boot中实现一个Filter,用于过滤特定的URL请求,并将其转发到Controller。通过创建CustomFilter类并注册到应用中,可以控制哪些URL会经过过滤逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring boot 没有了配置文件,可以写一个Filter 来完成过滤。

1.写Filter:

public class CustomFilter implements Filter {

/**

* 封装,不需要过滤的list列表

*/

protected static List patterns = new ArrayList();

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

HttpServletRequest httpRequest = (HttpServletRequest)servletRequest;

HttpServletResponse httpResponse = (HttpServletResponse)servletResponse;

String url = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length()); //请求的url

filterChain.doFilter(httpRequest, httpResponse); // 发到controller方法时候,参数居然是有的。

}

/**

* 是否需要过滤

* @param url

* @return

*/

private boolean isInclude(String url) {

for (Pattern pattern : patterns) {

Matcher matcher = pattern.matcher(url);

if (matcher.matches()) {

return true;

}

}

return false;

}

@Override

public void destroy() {

}

}

2. 注册过滤器: 在application.java下面 注册过滤器

@SpringBootApplication

public class SieracApiApplication extends SpringBootServletInitializer {

public static void main(String[] args) {

SpringApplication.run(SieracApiApplication.class, args);

}

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

return builder.sources(SieracApiApplication.class);

}

/**

* 注册过滤器

* @return

*/

@Bean

public FilterRegistrationBean filterRegistrationBean() {

FilterRegistrationBean registrationBean = new FilterRegistrationBean();

registrationBean.setFilter(new CustomFilter());

List urlPatterns = new ArrayList();

urlPatterns.add("/api/dealer/out/list"); //这个请求会走filter。 比如是/api/product/out/list就不会走filter

urlPatterns.add("/api/dealer/out/scanCheck");

urlPatterns.add("/api/dealer/out/detail");

urlPatterns.add("/api/dealer/out/scanStatus");

registrationBean.setUrlPatterns(urlPatterns);

return registrationBean;

}

}

以上就能过滤你的url请求,并且发送到控制层。

### 实现请求转发至 HTML 页面 在 Spring Boot 中实现请求转发到 HTML 页面主要依赖于控制器 (Controller) 和视图解析器 (View Resolver),这使得应用程序能够响应 HTTP 请求并返回渲染后的 HTML 页面。 当使用 `@Controller` 注解而非 `@RestController` 时,方法返回字符串会被视为试图名称[^3]。这意味着如果希望处理 GET 或 POST 请求并将结果导向特定的 HTML 文件,则应在相应的处理器函数里指定该文件名作为返回值。对于 Thymeleaf 这样的模板引擎而言,在 resources/templates 下放置 .html 文件即可被识别为合法路径的一部分。 下面是一个简单的例子来展示如何设置: #### 控制器代码示例 ```java import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HtmlPageForwarder { @GetMapping("/showPage") public String showHtmlPage() { return "example"; // 对应的是resources/templates/example.html } } ``` 此段 Java 代码定义了一个名为 `HtmlPageForwarder` 的类,并通过 `@Controller` 来标记它作为一个 MVC 架构中的控制层组件。内部的方法 `showHtmlPage()` 使用了 `@GetMapping` 映射 URL 路径 `/showPage` 到这个方法调用上。一旦接收到匹配的 HTTP 请求,就会执行这段逻辑并向客户端发送指向 `resources/templates/example.html` 的指令。 为了确保上述功能正常工作,还需要确认项目的 Maven 配置包含了 Web 支持以及合适的 JSON 处理库。通常情况下,只需加入如下依赖项就可以满足需求[^2]: ```xml <dependencies> <!-- 其他可能存在的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 如果需要额外定制JSON序列化行为可选加此项 --> <!--<dependency>--> <!-- <groupId>org.springframework.boot</groupId>--> <!-- <artifactId>spring-boot-starter-json</artifactId>--> <!-- <version>${spring-boot.version}</version>--> <!-- <scope>compile</scope>--> <!--</dependency>--> </dependencies> ``` 此外,默认生成的 Spring Boot 项目结构中已包含用于存储静态资源和模板页面的相关目录。具体来说,`static` 文件夹用来存放 JavaScript、CSS 及图片等前端资产;而 `templates` 文件夹则是放置像 FreeMarker 或 Thymeleaf 等模板引擎所使用的 HTML 文件的地方[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值