我试图在我的spring boot应用程序中首次创建一个拦截器,但不知何故,它不是自动创建的,如教程中所述。
我试图创建一个WebConfig类来扩展WebMvcConfigurerAdapter类,并将其注释为@Component,但没有成功。我还试图创建一个WebConfig,用@configuration和@enableWebMVC注释实现WebMvcConfigurer接口,但也没有成功。
@Configuration
@EnableWebMvc
@ComponentScan("com.*")
public class WebConfig implements WebMvcConfigurer {
public WebConfig() {
super();
}
@Autowired
HandlerInterceptor headerModifierInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
System.out.println("------------------hi");
registry.addInterceptor(headerModifierInterceptor);
}
}
@SpringBootApplication
@EnableWebSecurity
@ComponentScan(basePackages = {"com.*"})
@EntityScan("com")
public class CoreRestAPIApplication {
public static void main(String[] args) {
SpringApplication.run(CoreRestAPIApplication.class, args);
}
}
我的拦截器类:
@Component
public class RestTemplateHeaderModifierInterceptor
implements HandlerInterceptor {
@Autowired
AuthUtil authUtil;
@Autowired
JwtTokenProvider jwtTokenProvider;
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
String resolvedToken = jwtTokenProvider.resolveToken(request);
if (!StringUtils.isEmpty(resolvedToken)) {
String updatedToken = jwtTokenProvider.createToken(jwtTokenProvider.getUsername(resolvedToken), jwtTokenProvider.getAuthentication(resolvedToken).getAuthorities());
response.addHeader(authUtil.AUTH_HEADER_NAME, updatedToken);
}
}
}
经过一些搜索,我发现我有一个注册的WebMvcConfigurationSupport配置。但是,如果有人希望使用拦截器修改头部,不要使用拦截器,因为如果您返回ResponseEntity或您的控制器方法返回@ResponseBody,spring不会很好地处理它。取而代之的是(至少对于我来说是在每次收到有效请求时过滤和更新令牌),使用doFilterInternal方法将标头添加到响应中(或者如果愿意的话添加cookie..)下面是我是如何做到这一点的一个例子:
public class JwtTokenFilter extends OncePerRequestFilter {
private JwtTokenProvider jwtTokenProvider;
public JwtTokenFilter(JwtTokenProvider jwtTokenProvider) {
this.jwtTokenProvider = jwtTokenProvider;
}
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
String token = jwtTokenProvider.resolveToken(httpServletRequest);
try {
if (token != null && jwtTokenProvider.validateToken(token)) {
Authentication auth = jwtTokenProvider.getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
if(!jwtTokenProvider.isExpired(token)) {
httpServletResponse.setHeader("authKey", jwtTokenProvider.createToken(jwtTokenProvider.getUsername(token), auth.getAuthorities()));
}
}
} catch (ClientErrorException ex) {
//this is very important, since it guarantees the models is not authenticated at all
SecurityContextHolder.clearContext();
httpServletResponse.sendError(ex.getStatus().value(), ex.getMessage());
return;
}
filterChain.doFilter(httpServletRequest, httpServletResponse);
}
}
我想在我的Quarkus应用程序中添加一个HTTP拦截器,这样我就可以拦截所有HTTP请求。如何实现?
谁能帮我读取 Spring 引导拦截器( 方法)中的应用程序属性值? 我试图在中编写一些逻辑。这个逻辑需要从文件中获取一些值。我使用注释,但它总是空的。 谢谢。
我想添加spring mvc拦截器作为Java配置的一部分。我已经有了一个基于xml的配置,但是我正在尝试使用Java的配置。对于拦截器,我从spring的文档中知道可以这样做- 但我的拦截器使用了一个spring豆,就像下面这样- SomeService类如下所示- 我使用这样的注释来扫描bean,并且没有在配置类中将它们指定为 根据我的理解,由于Java配置使用new来创建对象,所以sprin
谢谢你的提示 问候Rizzi
问题内容: 我正在使用Java EE 6和Jboss AS7.1,并尝试使用拦截器绑定(来自jboss网站的示例)。 我有一个InterceptorBinding注解: 拦截器: 还有一个豆: 但是拦截器没有被称为。。。 在编写此代码时将调用拦截器: 谢谢你的帮助。 问题答案: 您是否按照参考示例中的说明启用了拦截器? 缺省情况下,bean档案没有通过拦截器绑定绑定的已启用拦截器。必须通过将侦听器
在这个问题中,我遇到了与Struts 2相反的问题:仅从defaultStack截取器中排除验证方法 上面的问题涉及到所有的方法都被排除在外,我的问题是没有任何方法被排除在外! 我正在尝试让authenticationInterceptor忽略LoginAction的showLogin方法: 但是,每次我转发到loginInitial时,拦截器都会抓取它,即使我的showLogin方法被排除在外。