2013-12-15 2 views
0

웹 응용 프로그램 내에서 프로그래밍 방식으로보기에 액세스하는 논리를 쉽게 배치 할 수 있지만 사용자가 JSP 페이지 자체로 직접 이동하지 못하게하는 방법은 무엇입니까?webapp 디렉토리/폴더에 대한 액세스를 보호하는 방법은 무엇입니까?

@RequestMapping("/SomeView") 
public void goToSomeView{ 

if(logicIsNotSatisfied) 
    return new ModelAndView("failure"): 
else 
    return new ModelAndView("welcome"); 
} 

쉬운만큼

그러나 예를 들어 자원 에 웹 브라우저에 직접 경로를 입력에서 사용자를 유지하는 방법 :

http://mydomain/myWebApp/resouces/stuff.png 

질문 :

사용자가 웹 응용 프로그램의 디렉토리에 직접 액세스하지 못하도록 제한하는 방법은 무엇입니까?

답변

4

JSP를 WEB-INF 아래에 배치하면 외부에서 액세스 할 수 없습니다. 컨트롤러가 없기 때문에 모든 사용자가 얻게 될 것이기 때문에 뷰에 의해 액세스되는 모든 데이터를 사용할 수 없다는 것을 감안할 때 직접적으로 액세스하는 것은 큰 문제가 아니어야합니다. 호출됩니다.

사용자가 액세스 제어없이 액세스 할 수 없도록하려면 정적 리소스를 사용하여 사용자가 액세스 제어 권한없이 액세스 할 수 없도록하려면 WEB-INF 아래 또는 webapp 디렉토리 외부에 배치하고 컨트롤러를 통해 액세스하십시오 사용자가 액세스 할 수 있고 읽으며 응답에 쓸 수 있습니다.

+0

충분히 쉽습니다. 감사합니다 – stackoverflow

2

몇 가지 조언을 드리고 싶습니다. JSP를 사용자가 방문하는 페이지로 생각하지 마십시오. JSP는 정적 HTML 페이지가 아닙니다. JSP는 동적으로 HTML을 렌더링하는 방법입니다.

JB Nizet을 제안하면 응용 프로그램의 진입 점을 통과하지 않는 한 JSP 렌더링에 대해 걱정할 필요가 없습니다. 당신이 그 엔트리 포인트를 제어하기 때문에, 즉. 서블릿, 필터, 컨트롤러 등을 사용하여 응답을 렌더링하는 방법을 결정할 수 있습니다.

URL 매핑을 적절하게 프로그래밍하십시오. 그들은 적절한 필터를 통해 가면

http://mydomain/myWebApp/resouces/stuff.png 

에 액세스하려는 사용자는 반드시 정적 이미지 리소스 stuff.png을받을 필요가 없습니다. 액세스를 차단할 수 있습니다.

+0

시간을내어 설명해 주셔서 감사합니다. 나는 스프링 접근 방식을 알아 챘다. 스프링 보안을 사용합니다. 하지만 응용 프로그램 서버 자체를 사용하는 전략이 있다고 생각했습니다. 'JB Nizet'Suggestion으로 되돌아 가면, WEB-INF/디렉토리 밑에 모든 것을 놓으면 뷰 자체에서 리소스를 찾는 문제가 발생합니다 (즉, <- 찾을 수 없음). 이러한 리소스는 항상 있어야합니다. 직접 액세스 할 수 있습니까? 또는 해당 자원으로 해당 페이지에 도달하기 위해 사용자가 올바른 권한 부여/인증을 가지고있는 경우에만 해당 자원을 제한해야합니까? – stackoverflow

+1

@stack JB Nizet은 브라우저 클라이언트가'yourhost.com/WEB/images/stuff.png'와'WEB/images/stuff '에 대해 GET 요청을하기 때문에''을 할 수 없다고 말합니다 .png'는 액세스 가능한 URL이 아닙니다 (일부 서블릿이나 컨트롤러에 매핑하지 않는 한). Spring에서는 정적 리소스 핸들러를 등록하고 원하는 규칙을 적용 할 수 있습니다. 보통 이러한 자원은'css','js' 또는 이미지 파일이 될 것이므로 인증은 실제로 적용되지 않습니다. –

관련 문제