2017-12-11 7 views
0

リクエストを/ DataServiceから開始する場合は、以下のGetメソッドにリダイレクトする必要があります。サーブレットフィルタは無限ループへのリクエストを転送します

フィルタの実装:

@Override 
    public void doFilter(final ServletRequest arg0, final ServletResponse arg1, final FilterChain filterChain) 
      throws IOException, ServletException { 
     final HttpServletRequest request = (HttpServletRequest) arg0; 
     final HttpServletResponse response = (HttpServletResponse) arg1; 
     final HttpSession session = request.getSession(); 

     final String id = (String) session.getAttribute("id"); 
if ((request.getRequestURL().indexOf("/login")) < 0) { 
     if (id == null) { 
      error = "authentication required"; 
     } 
    } 
     if (null == error) { 
      filterChain.doFilter(request, response); // happy flow 
     } else if (request.getServletPath().startsWith("/DataService")) { 
      // Need to redirect to one GET method 

     } else { // unauthorized flow 
      request.getRequestDispatcher("/login").forward(request, response); 
     } 
    } 

方法

@RestController 
@RequestMapping("/DataService") 
public class DataController { 

    @Autowired 
    private DataLoaderService dataLoader; 

    @RequestMapping(value = "/loadAllStaticData", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) 
    @ResponseBody 
    public Boolean loadAllData() throws DataLoadException { 
     DataLoader.loadAllData(); 
     return true; 
    }. 

は、web.xmlファイルを使用していないDataController.IでloadAllData()メソッドにフィルタ法を行うからの要求を転送する方法を私に助けを得るとフィルタ設定のためにJava設定を使用しました。 私はスニペットの下で疲れましたが、もう一度dofilterメソッドにリダイレクトしました。

else if (request.getServletPath().startsWith("/DataService")) { 
      request.getRequestDispatcher(request.getServletPath()).forward(); 
+0

エラー変数はどこに定義されていますか?それは何に依存していますか?これは、https://stackoverflow.com/questions/2725102/how-to-use-a-servlet-filter-in-java-to-change-an-incoming-servlet-request-urlと同様の形になります。 –

+0

私は信じています'/ DataService/loadAllStaticData'のようなものにリダイレクトする必要があります –

+0

@WilliamBurnham申し訳ありません。質問が更新されました。 – Ramkumar

答えて

0

IDのバリデータを作成することをお勧めします。リバースではなくフォワードにする必要があるのはなぜですか?

// get the id to validate 
if (isValid(id)) { 
    filterChain.doFilter(request, response); 
} else { 
    if (request.getServletPath().starts with("/DataService")) { 
    response.sendRedirect("/DataService/loadAllData"); 
    } else { 
     String error = "something"; 
     // do whatever you want with your error message 
     response.send redirect("/login"); 
    } 
} 

// make your boolean isValid method 
関連する問題