jsp 로그인 필터를 만들고 싶습니다.jsp 필터, 페이지 이름 얻기
필터해야한다 : 모든 페이지에
- 차단 요청; 요청 된 페이지가 로그인 페이지 인 경우 요청이 세션이 로그인하지 않은 경우 로그인 세션
- 의 일부인지 여부를 확인, 그렇지 않으면 루프 것, 리디렉션하지 마십시오 로그인 페이지
- 에 클라이언트를 리디렉션
덕분에 사전
jsp 로그인 필터를 만들고 싶습니다.jsp 필터, 페이지 이름 얻기
필터해야한다 : 모든 페이지에
덕분에 사전
에서 필터의 구현 방식은 (더 코드, 나는 당신이 알고 있으리라 믿고있어 그 전제 조건입니다 서블릿 API) 설명되지 않습니다.
임의의 페이지에 대한 요격 요청. 요청이 로그인 세션
당신은 서블릿 필터를 생성되어야한다의 일부인지 여부를 확인하고 응용 프로그램에 대한 모든 요청이 필터에 의해 차단 될 수 있도록, /*
에 대해 매핑. 인증 된 사용자의 추적은 세션 속성을 사용하여 수행되는 것으로 가정합니다. 필터 내의 HttpServletRequest
개체에서 세션을 추출하고 getAttribute()
메서드를 사용하여 특성을 추출 할 수 있습니다.
는, 세션 또는 속성이 존재하지 않는 로그인 페이지
만약에 클라이언트를 리디렉션, 또는 속성이 false, 당신은 리디렉션해야합니다 HttpServletResponse 개체의 sendRedirect()
메서드를 사용하여 로그인 페이지로 이동합니다. 요청 된 페이지가 로그인 페이지 인 경우
, 그렇지 않으면 루프
당신은 요청이 HttpServletRequest의에 대해 getServletPath() 메소드를 사용하여 로그인 페이지에 있는지 여부를 확인할 수 있습니다 것, 리디렉션하지 않습니다 목적.
/ApplicationContext/
디렉토리에서 문서 루트 디렉토리에, 즉 로그인 페이지 및 기타 "공공"의 콘텐츠를 넣어 : 당신이 다음을 수행한다면이 필요하지 않습니다./ApplicationContext/protected
디렉토리에 보호 된 콘텐츠 (모든 서블릿 매핑 포함)를 넣으십시오./*
대신 /protected
에만 필터를 매핑하십시오. 따라서 필터는 보호 된 리소스에 대한 요청 만 차단합니다. 리소스를 다른 경로에 매핑 할 때는주의하십시오.* ApplicationContext는 응용 프로그램의 컨텍스트 경로입니다. 귀하의 웹 사이트가 http://example.com/App
일 경우 컨텍스트는 일반적으로 App
입니다. 따라서 로그인 페이지는 http://example.com/App/login.jsp
이어야하며 보호 된 페이지는 다음과 같이 액세스해야합니다. http://example.com/App/protected/secret.jsp
제한된 페이지를 특정 폴더에 넣으십시오./secured
, /app
, /private
, /admin
등을 사용하고 필터 (또는 컨테이너 관리 보안 제약)를 해당 폴더를 정확하게 다루는 URL 패턴 (예 : /secured/*
, /app/*
, /private/*
, /admin/*
등. 마지막으로 그 폴더 외부에 로그인 페이지를 넣으십시오.
our servlet filter wiki page에는이 사례를 정확하게 다루는 코드 예제가 있습니다.
젠장, 그게 엄청난 꼬리표 야. –
정답을 주셔서 감사합니다. 1) 왜 속성에 데이터를 "수동으로"저장하는 대신 request.getUserPrincipal()을 사용하지 않습니까? 2) getServletPath()는 "welcome files"(아마도 다른 jsf 경우 ...?)의 경우 실패합니다. 서블릿 이름이 아닌 디렉토리를 반환합니다. – AgostinoX
request.getUserPrincipal() 및 request.getRemoteUser()는 컨테이너 관리자 인증을 위해 작동합니다. 그것을 사용한다면, 세션 속성에 대해 이야기하는 단계를 바꾸십시오. 컨테이너 관리 인증을 사용하지 않고 스키마를 롤백 한 경우 해당 메소드는 null을 리턴합니다. –
getServletPath() 주제에서 특정 시나리오에서 실패합니다. 나는 (당신이 암시 한 것처럼) 디렉토리를 기억하지 않습니다. 그래서 내가 콘텐츠 분리를 제안했습니다. –