Java 如何测试servlet过滤器添加头Spring MVC和zuul代理
在对微服务基础设施中的用户进行身份验证的过程中,传递用户身份数据时,我有一个要测试的过滤器 当我使用Spring的MockMvc时,我还没有找到访问请求头的方法。很容易访问响应标题,如下所示:Java 如何测试servlet过滤器添加头Spring MVC和zuul代理,java,spring,spring-mvc,servlets,netflix-zuul,Java,Spring,Spring Mvc,Servlets,Netflix Zuul,在对微服务基础设施中的用户进行身份验证的过程中,传递用户身份数据时,我有一个要测试的过滤器 当我使用Spring的MockMvc时,我还没有找到访问请求头的方法。很容易访问响应标题,如下所示: @Test public void WhenSendingRequestThenHeaderAdded() throws Exception { mockMvc.perform(get("/health")) .andExpect(header().string("X-Us
@Test
public void WhenSendingRequestThenHeaderAdded() throws Exception {
mockMvc.perform(get("/health"))
.andExpect(header().string("X-User-Id", "test"))
.andReturn();
}
在我的filter类中,我添加了用户ID和用户名以供下游使用。我想在集成测试中进行测试。目前,我在使用restemplate
和RestEasy
运行集成测试时遇到问题,因为我的服务器使用TLS,而且我还没有找到对受TLS保护的服务器运行集成测试的方法
过滤类
当这个过滤器正常工作时,我想写一个测试来证明它是正确的
我还考虑过使用Zuul过滤器,但没有成功
我正在使用
弹簧靴v1.3.1
春季4
春季安全4
Zuul 1.0.3你找到解决方案了吗?还没有,还在寻找。我将离开祖尔,离开春天,所以我可能永远也找不到答案。
package com.example.gateway.authentication;
import com.example.gateway.users.IUserService;
import com.example.gateway.users.User;
import com.example.gateway.users.UserNotFoundException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* This filter adds user details for authenticated users to the HTTP Request for downstream consumption.
*/
@Component
public class AddUserInfoFilter implements Filter {
private IUserService userService;
@Autowired
public AddUserInfoFilter(IUserService userService) {
this.userService = userService;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(req);
try {
User user = userService.lookupUser(
RequestParser.getUsernameFromHeader(req));
requestWrapper.addHeader("X-User-Id", String.valueOf(user.getId()));
requestWrapper.addHeader("X-Username", user.getUsername());
chain.doFilter(requestWrapper, response); // Goes to default servlet.
} catch (UserNotFoundException e) {
requestWrapper.addHeader("X-User-Id", "-1");
requestWrapper.addHeader("X-Username", "NOT_AUTHENTICATED");
chain.doFilter(request, response);
}
}
@Override
public void destroy() {}
@Override
public void init(FilterConfig filterConfig) throws ServletException { }
}