시큐리티3 로그인시 바로이전에 접근했던 페이지로 이동이 가능한가요?

2,042 views
Skip to first unread message

okangilo

unread,
Mar 26, 2012, 4:26:35 AM3/26/12
to Korea Spring User Group
안녕하세요.

스프링 시큐리티 3.1버전으로 프로젝트를 진행중인데 모르는부분이 생겨 질문드립니다.

권한이 없는 URL로 접근할경우 로그인페이지로 이동하게 되있는데
여기서 로그인한뒤에 좀전의 권한이 없었던 URL로 다시 보낼려면 어떻게 해야되나요??

시큐리티는 너무어려운거 같아요.ㅠㅠ

도움좀 부탁드려요.


전형민

unread,
Mar 26, 2012, 4:59:43 AM3/26/12
to ks...@googlegroups.com
오래간만에 답변을 올려 봅니다.

우선 해결 방안을 올리기 전에 저는 security 를 조금 수정해서 사용하고 있음으로 감안하고 들어 주십시요.

하지만 해결 아이디어 정도는 드릴수도 있을것 같아서 글을 올립니다.

1. 권한이 없어서 login page로 전달할때 이전 request를 pageContext에서 가지고 있을 것입니다.
login page로 이동할때 최초 request를 유지하고 있을 경우 해당 request의 정보에서 
좀전에 요청한 url을 다시 받을수 있겠죠...

2. 권한없는 page에서 login page로 이동할때 redirect: 하지 않고 forward: 하면.
브리우져의 url에는 최초에 요청한 url이 그대로 남아 있습니다.
해당 정보를 활용해도 되겠죠..

그럼 도움이 되었기를 바랍니다. 



------------------------------------
당신의 과거가 당신을 만든다.


2012년 3월 26일 오후 5:26, okangilo <okan...@gmail.com>님의 말:


--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.


okangilo

unread,
Mar 26, 2012, 5:38:50 AM3/26/12
to ks...@googlegroups.com
먼저 답변달아주셔서 감사합니다!

제가 아직 시큐리티를 다루는게 미숙해서
뭔가 아~! 하면서도 어떻게 해야될지를 모르겠어요.

좀더 설명을 붙여서 다시한번 질문드리겠습니다.

<form-login login-page='/common/user/login.do'
    login-processing-url="/j_spring_security_check" 
    default-target-url='/common/user/login_success.do'
    authentication-failure-url="/common/user/login.do?error=1"
    always-use-default-target='true' />

시큐리티 설정을 이렇게 해놨습니다.


메인페이지에서 report.do 링크를 클릭하게되면 권한이 없는페이지라서 
설정에 있는 /common/user/login.do 가 호출되는데
request에 있는 referer를 뽑아봐도 report.do 가 아닌 main.do 를 가지고있습니다.

위의 설정처럼 해서는 중간에 인증이 불허된 report.do의 정보를 가져오는건 안되는건가요?


2012년 3월 26일 오후 5:59, 전형민 <supe...@wellsoft.co.kr>님의 말:

박용권

unread,
Mar 26, 2012, 6:15:21 AM3/26/12
to ks...@googlegroups.com
default-target-url='/common/user/login_success.do' 값과 always-use-default-target='true' 값을 제거하시면 원하시는 행동을 할거에요.

2012년 3월 26일 오후 6:38, okangilo <okan...@gmail.com>님의 말:

okangilo

unread,
Mar 26, 2012, 6:43:19 AM3/26/12
to ks...@googlegroups.com
허걱..내일 한번 해보고 결과 적겠습니다..

2012년 3월 26일 오후 7:15, 박용권 <araw...@gmail.com>님의 말:

okangilo

unread,
Mar 26, 2012, 9:15:20 PM3/26/12
to ks...@googlegroups.com
오전에 출근하자마자 테스트해봤는데..
형민님이랑 용권님 방법을 동시에 적용하면 될거같기도 한데..
또 막혀버렸어요ㅠ_ㅠ

먼저 용권님이 얘기주신데로 하니 로그인이후에 제가 원한 이전페이지로 돌아가긴하는데
default-target-url='/common/user/login_success.do'
제가 위의 저쪽 메서드에서 필요한정보를 session을 등록해놨는데
그부분만 처리가 되면될거같아요..

형민님이 얘기주신 이전 페이지의 정보를 login_success.do에서 가져오는 방법을 찾아내던지
용권님이 얘기주신 방법을 사용하면서 로그인성공시의 이벤트를 잡아서 세션을 추가해주면 되지않을까라고 고민을하면서

답변을 작성할려구 들어왔어요.
감사합니다

2012년 3월 26일 오후 7:43, okangilo <okan...@gmail.com>님의 말:

코바

unread,
Mar 27, 2012, 3:29:33 AM3/27/12
to Korea Spring User Group
로그인완료 후 저렇게 처리 하지 마시고

<form-login login-page="/main/loginPage" login-processing-url="/
login"
always-use-default-target="false"
authentication-success-handler-ref="authenticationSuccessHandler"
<-- 이부분
authentication-failure-url="/main/loginFailure"/>

저렇게 authentication-success-handler-ref 이부분을 등록해 주세요

<beans:bean id="authenticationSuccessHandler" class="클래스 위치 "/>

이 클래스 내용은

public class CustomAuthenticationSuccessHandler extends
SavedRequestAwareAuthenticationSuccessHandler implements
AuthenticationSuccessHandler{
public void onAuthenticationSuccess(HttpServletRequest
request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
// 로그인 완료후 처리할 내용
super.onAuthenticationSuccess(request, response, authentication);
}

}

이런식으로 클래스를 만들어 주시면
따로 저런식으로 사용 안하셔도 로그인 완료 후 처리가 됩니다.
SavedRequestAwareAuthenticationSuccessHandler 이걸 상속 받으시면 완료 후 이전 URL로 이
동합니다.

On 3월27일, 오전10시15분, okangilo <okang...@gmail.com> wrote:
> 오전에 출근하자마자 테스트해봤는데..
> 형민님이랑 용권님 방법을 동시에 적용하면 될거같기도 한데..
> 또 막혀버렸어요ㅠ_ㅠ
>
> 먼저 용권님이 얘기주신데로 하니 로그인이후에 제가 원한 이전페이지로 돌아가긴하는데
> default-target-url='/common/user/login_success.do'
> 제가 위의 저쪽 메서드에서 필요한정보를 session을 등록해놨는데
> 그부분만 처리가 되면될거같아요..
>
> 형민님이 얘기주신 이전 페이지의 정보를 login_success.do에서 가져오는 방법을 찾아내던지
> 용권님이 얘기주신 방법을 사용하면서 로그인성공시의 이벤트를 잡아서 세션을 추가해주면 되지않을까라고 고민을하면서
>
> 답변을 작성할려구 들어왔어요.
> 감사합니다
>

> 2012년 3월 26일 오후 7:43, okangilo <okang...@gmail.com>님의 말:


>
>
>
>
>
>
>
> > 허걱..내일 한번 해보고 결과 적겠습니다..
>

> > 2012년 3월 26일 오후 7:15, 박용권 <arawn...@gmail.com>님의 말:


>
> > default-target-url='/common/user/login_success.do' 값과
> >> always-use-default-target='true' 값을 제거하시면 원하시는 행동을 할거에요.
>

> >> 2012년 3월 26일 오후 6:38, okangilo <okang...@gmail.com>님의 말:


>
> >> 먼저 답변달아주셔서 감사합니다!
>
> >>> 제가 아직 시큐리티를 다루는게 미숙해서
> >>> 뭔가 아~! 하면서도 어떻게 해야될지를 모르겠어요.
>
> >>> 좀더 설명을 붙여서 다시한번 질문드리겠습니다.
>
> >>> <form-login login-page='/common/user/login.do'
> >>> login-processing-url="/j_spring_security_check"
> >>> default-target-url='/common/user/login_success.do'
> >>> authentication-failure-url="/common/user/login.do?error=1"
> >>> always-use-default-target='true' />
>
> >>> 시큐리티 설정을 이렇게 해놨습니다.
>
> >>>http://localhost:8080/center/main.do( 허용 )
> >>>http://localhost:8080/center/report/report.do(미허용)
>
> >>> 메인페이지에서 report.do 링크를 클릭하게되면 권한이 없는페이지라서
> >>> 설정에 있는 /common/user/login.do 가 호출되는데
> >>> request에 있는 referer를 뽑아봐도 report.do 가 아닌 main.do 를 가지고있습니다.
>
> >>> 위의 설정처럼 해서는 중간에 인증이 불허된 report.do의 정보를 가져오는건 안되는건가요?
>

> >>> 2012년 3월 26일 오후 5:59, 전형민 <super...@wellsoft.co.kr>님의 말:


>
> >>> 오래간만에 답변을 올려 봅니다.
>
> >>>> 우선 해결 방안을 올리기 전에 저는 security 를 조금 수정해서 사용하고 있음으로 감안하고 들어 주십시요.
>
> >>>> 하지만 해결 아이디어 정도는 드릴수도 있을것 같아서 글을 올립니다.
>
> >>>> 1. 권한이 없어서 login page로 전달할때 이전 request를 pageContext에서 가지고 있을 것입니다.
> >>>> login page로 이동할때 최초 request를 유지하고 있을 경우 해당 request의 정보에서
> >>>> 좀전에 요청한 url을 다시 받을수 있겠죠...
>
> >>>> 2. 권한없는 page에서 login page로 이동할때 redirect: 하지 않고 forward: 하면.
> >>>> 브리우져의 url에는 최초에 요청한 url이 그대로 남아 있습니다.
> >>>> 해당 정보를 활용해도 되겠죠..
>
> >>>> 그럼 도움이 되었기를 바랍니다.
>
> >>>> ------------------------------------
> >>>> 당신의 과거가 당신을 만든다.
>

> >>>> 2012년 3월 26일 오후 5:26, okangilo <okang...@gmail.com>님의 말:


>
> >>>> 안녕하세요.
>
> >>>>> 스프링 시큐리티 3.1버전으로 프로젝트를 진행중인데 모르는부분이 생겨 질문드립니다.
>
> >>>>> 권한이 없는 URL로 접근할경우 로그인페이지로 이동하게 되있는데
> >>>>> 여기서 로그인한뒤에 좀전의 권한이 없었던 URL로 다시 보낼려면 어떻게 해야되나요??
>
> >>>>> 시큐리티는 너무어려운거 같아요.ㅠㅠ
>
> >>>>> 도움좀 부탁드려요.
>
> >>>>> --
> >>>>> Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> >>>>> 이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
> >>>>> 그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.

> >>>>> 더 많은 옵션을 보려면http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.


>
> >>>> --
> >>>> Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> >>>> 이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
> >>>> 그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.

> >>>> 더 많은 옵션을 보려면http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.


>
> >>> --
> >>> Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> >>> 이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
> >>> 그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.

> >>> 더 많은 옵션을 보려면http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.

Reply all
Reply to author
Forward
0 new messages