[SPRING] Spring Security 3 처음 요청한 URL 가져 오기
SPRINGSpring Security 3 처음 요청한 URL 가져 오기
사용자가 어디서 왔는지에 따라 스프링 보안 로그인 페이지를 수정해야합니다. 제 의뢰인은 두 스타일이 다른 스타일을 원합니다. appcontextroot / test vs appcontextroot /에서 선택하십시오. 나는 아래를 시도했지만 String url = savedRequest.getRedirectUrl (); 은 이미 봄 로그인 페이지와 동일하고 사용자가 요청한 초기 페이지가 아닙니다. 어떤 아이디어?
ExternalContext externalContext = FacesUtils.getExternalContext();
HttpServletRequest request = (HttpServletRequest)externalContext.getRequest();
HttpSession session = request.getSession(false);
if(session != null) {
SavedRequest savedRequest = new DefaultSavedRequest(request, new PortResolverImpl());
String url=savedRequest.getRedirectUrl();
}
해결법
-
==============================
1.새 세션을 만들지 말고 세션에서 SavedRequest를 추출해야합니다.
새 세션을 만들지 말고 세션에서 SavedRequest를 추출해야합니다.
SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
-
==============================
2.
SavedRequest savedRequest = (SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST"); // ...check for null... String targetUrl = savedRequest.getRedirectUrl();
추악하지만 작동하지만, HttpServletResponse를 사용할 수없는 경우 (예 : org.springframework.social.connect.web.SignInAdapter를 사용하는 경우).
Spring Security 3.1.0.RC2로 테스트되었습니다.
-
==============================
3.나는 그것이 제안 된 해결책으로 작동하게 만들지 않았고, 여기 내가 발견 한 것이있다. (스프링 3.1 사용).
나는 그것이 제안 된 해결책으로 작동하게 만들지 않았고, 여기 내가 발견 한 것이있다. (스프링 3.1 사용).
필터 클래스에서
CharsetFilter implements Filter { @OVerride public void doFilter(ServletRequest request, ServletResponse response, FilterChain next) throws IOException, ServletException { HttpServletRequest hsr = (HttpServletRequest) request; if (hsr.getUserPrincipal() == null) { HttpSession session = hsr.getSession(); if (!(hsr == null)) { logger.info("path : " + hsr.getPathInfo()); session.setAttribute("beforeLoginUrl", hsr.getPathInfo()); } } }
그런 다음 web.xml에서 필터를 선언합니다.
<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter> <filter-name>charsetFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>charsetFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>CharsetFilter</filter-name> <filter-class>com.ent.foo.CharsetFilter</filter-class> <init-param> <param-name>requestEncoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter>
그런 다음 성공적인 로그인 후 리디렉션 URL에서 HttpSession을 다시 가져옵니다.
@RequestMapping(value = "successful") public void showSuccessfulogin (HttpSession session) { String redirectUrl = (String) session.getAttribute("beforeLoginUrl"); if (redirectUrl != null) { session.removeAttribute("beforeLoginUrl"); return "redirect:" + redirectUrl; } return "redirect:/"; }
여기에 효과가있을만한 물건이 있지만,
hsr.getPathInfo()
.css 또는 .js 등으로 끝나는 지 확인하십시오.
또한 로그인에 실패하면 세션 속성이 이미 설정되어 있는지 확인하고 다른 경우는 특별한 경우를보아야합니다!
Btw 내 필터는 utf-8에서 모든 입력 / 출력을 포맷하기 전에 사용되었습니다.
그것이 도움이되기를 바랍니다.
-
==============================
4.나에게 Spring Security 3.0.0을 사용했고 다음과 같은 작업을했다.
나에게 Spring Security 3.0.0을 사용했고 다음과 같은 작업을했다.
DefaultSavedRequest savedRequest = (DefaultSavedRequest) request.getSession (). getAttribute ( "SPRING_SECURITY_SAVED_REQUEST_KEY"); targetUrl = savedRequest.getRedirectUrl ();
from https://stackoverflow.com/questions/5389274/spring-security-3-get-initially-requested-url by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] EasyMock 팩토리 메소드로 생성 된 빈의 자동 연결? (0) | 2019.02.07 |
---|---|
[SPRING] 두 날짜 간의 레코드를 조회하는 HQL (0) | 2019.02.07 |
[SPRING] Spring websocket stomp 서버에서 클라이언트 세션 연결 해제 (0) | 2019.02.07 |
[SPRING] Morphia, Mongo4j 및 MongoDB의 Spring 데이터는 어떻게 비교됩니까? [닫은] (0) | 2019.02.07 |
[SPRING] 어떻게 봄 부팅 데몬 / 서버 응용 프로그램이 즉시 종료 / 종료되지 않도록하려면? (0) | 2019.02.07 |