[김민정님답] 아래 오류 답입니다.
- 작성자 :
- 조*철
- 작성일 :
- 2011-12-29 16:35:52
- 조회수 :
- 1,619
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
아래 김민정님 오류에 대한 답입니다.
현재 공통 컴포넌트는 두번 인증을 하게 되어잇습니다.
처음은 Login Filter에서
두번째는 Spring Security의 Authencattion Manager에서
인증을 수행합니다.
문제는 첫번째 Login Filter에서 인증이 끝난 후 두번째 스프링
시큐리티 필터를 호출하는 과정에서 발생한 것 같습니다.
지금 스프링시큐리티를 호출할 때 GET 방식으로 패스워드를
파라메터로 넘기고 있는데 이럴 경우 패스워드에 URI 인코딩 문자가
잇으면 URL을 다르게 해석할 수 있습니다.
일례로 지금 실패하고 잇는 admin333 id의 패스워드를 보면 '+'문자가
있는데 이것은 URL에서 스페이스 문자로 치환됩니다.
해결방벙은 POST방식으로 파라메터를 넘기거나 아니면 password 파라메터에
userid를 넣고 두번째 인증때 Query문에서 패스워드 값을 읽어올 때 패스워드대신
userid를 읽어오게 하면 될 것입니다.(j_password 변수는 제거가 불가능하네요. ^^;;)
아니면 패스워드값을 URL encoding하는 방식이 있는데 이건 테스트도 해봐야하고
길이가 늘어날 위험도 있고 또 이미 앞에서 인증을 거쳣기 때문에 굳이 필요가 있을지
모르겠습니다.
그럼 수고하세요.
현재 공통 컴포넌트는 두번 인증을 하게 되어잇습니다.
처음은 Login Filter에서
두번째는 Spring Security의 Authencattion Manager에서
인증을 수행합니다.
문제는 첫번째 Login Filter에서 인증이 끝난 후 두번째 스프링
시큐리티 필터를 호출하는 과정에서 발생한 것 같습니다.
지금 스프링시큐리티를 호출할 때 GET 방식으로 패스워드를
파라메터로 넘기고 있는데 이럴 경우 패스워드에 URI 인코딩 문자가
잇으면 URL을 다르게 해석할 수 있습니다.
일례로 지금 실패하고 잇는 admin333 id의 패스워드를 보면 '+'문자가
있는데 이것은 URL에서 스페이스 문자로 치환됩니다.
해결방벙은 POST방식으로 파라메터를 넘기거나 아니면 password 파라메터에
userid를 넣고 두번째 인증때 Query문에서 패스워드 값을 읽어올 때 패스워드대신
userid를 읽어오게 하면 될 것입니다.(j_password 변수는 제거가 불가능하네요. ^^;;)
아니면 패스워드값을 URL encoding하는 방식이 있는데 이건 테스트도 해봐야하고
길이가 늘어날 위험도 있고 또 이미 앞에서 인증을 거쳣기 때문에 굳이 필요가 있을지
모르겠습니다.
그럼 수고하세요.
A
안녕하세요.. 조헌철님..
지적해 주신 문제의 가능성도 있는 것 같습니다.
이런 경우라면.. EgovLoginController의 j_password 부분의 데이터를 URLEncoder.encode() 메소드로 한번 적용해 보시면.. 되실 것 같습니다.
정확한 지적 .. 감사드립니다..
그럼.. 즐거운 하루되십시오.
감사합니다.
지적해 주신 문제의 가능성도 있는 것 같습니다.
이런 경우라면.. EgovLoginController의 j_password 부분의 데이터를 URLEncoder.encode() 메소드로 한번 적용해 보시면.. 되실 것 같습니다.
정확한 지적 .. 감사드립니다..
그럼.. 즐거운 하루되십시오.
감사합니다.