【问题标题】:Break servlet-filter work中断 servlet 过滤器工作
【发布时间】:2015-07-08 14:54:01
【问题描述】:

我有SecurityAuthorisationFilter 和以下部分代码:

for(String anonymousRequestURI : anonymousRequestURIs) {
     if(httpRequest.getRequestURI().equals(anonymousRequestURI)) {
         //allow request
     }
 }
 String authToken = getTokenFromRequest(httpRequest);

如果等于为真,我需要跳过所有下一个过滤操作并向控制器发送请求。但是,如果我写filterChain.doFilter(servletRequest, servletResponse),就没有结果。过滤器继续操作以查找令牌。我怎样才能摆脱过滤器?

【问题讨论】:

  • 你的意思是要跳过过滤器链的其余部分还是停止这个过滤器?
  • @AndersR.Bystrup 我想阻止这个。

标签: java jakarta-ee servlet-filters


【解决方案1】:

如果break没有给你你需要的东西,你可以像这样改变你的循环:

int i=0;
do {
      anonymousRequestURI = anonymousRequestURIs[i];
      i++;
while(!httpRequest.getRequestURI().equals(anonymousRequestURI) && i<anonymousRequestURIs.length);
String authToken = getTokenFromRequest(httpRequest);

【讨论】:

  • 不,它只会打破for循环并继续尝试获取authToken。
  • @Squeez 很好地改变你的循环,就像我的编辑一样。
  • 如果equals为真,我需要脱离过滤器并向控制器发送请求。
【解决方案2】:

我从您的评论中了解到,如果关于匿名请求 URI 的条件为真,您希望“突破”当前过滤器。你可以在调用chain.doFilter() 之后简单地return;:

for ( String uri : anonURIs ) {
    if ( ... ) {
        chain.doFilter( ... );
        return;
    }
}

String authToken = getTokenFromRequest( httpRequest );
...

干杯,

【讨论】:

  • 谢谢。现在chain.doFilter( ... ); 正在工作......有趣......如果早些时候它不起作用怎么办? :)
猜你喜欢
  • 2017-11-25
  • 2015-04-02
  • 2013-08-16
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多