编写一个过滤器MyFilter实现以下功能:1)按照utf-8字符集处理请求和响应中字符;2)实现跨域访问
时间: 2024-11-27 19:08:11 浏览: 3
过滤器笔记整理
在编写一个过滤器`MyFilter`来满足这两个需求时,你需要考虑的是网络服务端的应用环境,这里分别给出Java(基于Spring Boot)和JavaScript(基于Node.js Express)的例子:
**Java (Spring Boot)**:
```java
import org.springframework.web.filter.OncePerRequestFilter;
public class MyFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// 设置UTF-8编码
request.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=UTF-8");
// 添加CORS配置
response.setHeader("Access-Control-Allow-Origin", "*"); // 允许所有来源访问
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
// 执行原始请求过滤
filterChain.doFilter(request, response);
}
}
```
将此过滤器加入到Spring Boot应用的配置中,比如在`WebMvcConfigurer`接口中:
```java
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Bean
public MyFilter myFilter() {
return new MyFilter();
}
// ...其他配置...
}
```
**JavaScript (Express)**:
```javascript
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors()); // 使用内置的CORS中间件
// 自定义跨域配置
function customCors(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*'); // 允许所有来源访问
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
next(); // 继续执行请求
}
// 将自定义CORS配置应用到所有路由
app.use(customCors);
// 如果你想针对特定API路径启用定制的CORS,你可以这样做:
app.get('/api/*', customCors);
// 或者使用middleware前缀
app.use('/private', customCors);
```
在这个例子中,所有的请求都会经过`customCors`过滤器,除非你在某个具体的路由上覆盖了默认的CORS设置。
阅读全文