0
일부 GET 메소드의 로그인 페이지를 건너 뛰기 위해 서블릿 필터를 추가했습니다. 요청이/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을 사용하고 있지 않다 loadAllData() DataController.I의 방법으로 필터 방법을에서 요청을 전달하는 데 도움이 GET과 필터 구성을 위해 Java 구성을 사용했습니다. 나는 스 니펫 아래에 피곤했지만 dofilter 메서드로 다시 리디렉션됩니다.
else if (request.getServletPath().startsWith("/DataService")) {
request.getRequestDispatcher(request.getServletPath()).forward();
오류 변수는 어디에 정의되어 있습니까? 무엇에 의존 하는가? https://stackoverflow.com/questions/2725102/how-to-use-a-servlet-filter-in-java-to-change-an-incoming-servlet-request-url 양식과 비슷합니다. –
저는 믿습니다. '/ DataService/loadAllStaticData'와 같은 것으로 리디렉션해야합니다. –
@WilliamBurnham 죄송합니다. 질문이 업데이트되었습니다. – Ramkumar