yoni

URL 우회 하는 방법 본문

코딩

URL 우회 하는 방법

yoni-1117 2018. 5. 16. 15:04

명시적으로 기준이 되는 웹 도메인은 1개가 기본이다. 하지만 그렇게 사용하지 않을경우 혼란이 오게 되어 404에러를 뱉는다.


현재 개발하는 서비스의 메인 도메인이 1개이상인 경우의 대처방법은 아래와 같다.


/web/이랑 /mobile/ 이라는 기준 도메인을 쓰고있다.

메인 도메인을 2개를 사용하고있으면 404에러가 났을때 기본적으로 페이지를 전환하는 방법을 명시해 줘야한다. 그렇지 않으면 기본화면에 대한 혼동이 오기 때문에 

"오류발생 알림화면(허용되지 않는 요청을 하셨습니다)" 라는 화면으로 이동을 한다.






위와 같이 사용자가 서브도메인까지 정확하게 알 수는 없다. 그런 경우에는 위와 같은 화면이 보여지는걸 우회 시켜 줘야한다. 

해서 메인 도메인의 예외 상황 까지만 처리를 해준다.


원초적으로는 web.xml 파일에서 원시적으로 수정 해야 한다.

하지만 이미 개발이 많이 진행된 상황에서는 코드를 수정해야할 상황들이 많아져  context-security.xml에서 꼼수를 사용하여 우회시킨다.


▶web.xml

<servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.do</url-pattern>

 </servlet-mapping>




<intercept-url pattern="/" access="permitAll" />

<intercept-url pattern="/web/login.do" access="permitAll" />

<intercept-url pattern="/web/loginSuccess.do" access="permitAll" />

<intercept-url pattern="/web/loginFail.do" access="permitAll" />


URL 접속 경로를 "/web/login.do", "/web/loginSuccess.do", "/web/loginFail.do" 이렇게만 허가를 해줬다. 하지만 위의 에러 페이지를 우회하여 로그인 화면을 보여주기위해서 원하는 URL의 주소를 추가 작성해줘야 한다.


<intercept-url pattern="/web" access="denyAll" />

<intercept-url pattern="/web/" access="denyAll" />


cf) denyAll : 모든 사용자의 접근을 거부합니다.

원하는 패턴을 써주게 되면 해당 경로를 써도 로그인페이지로 이동하게 된다.


/web/, /mobile/의 도메인을 옮겨다니면서 로그인이 끊기지 않게 하려면

CustomAccessDeniedHandler.java 파일에서

AccessDeniedHandler를 사용해 

String requestURI = request.getRequestURI();

if(!("/web".equals(requestURI) || "/web/".equals(requestURI) || "/mobile".equals(requestURI) || "/mobile/".equals(requestURI))){

new SecurityContextLogoutHandler().logout(request, response, auth);

를 추가 해줘서 메인 도메인 전환 시 로그아웃을 해제 시킨다.



'코딩' 카테고리의 다른 글

map형과 list형  (0) 2018.06.18
쿼리 결과값에 문자 넣어주기 CONCAT  (0) 2018.06.11
java equals  (0) 2018.04.02
문자열 한글자씩 비교  (0) 2018.04.02
node별로 서버의 값을 넣어줄때  (0) 2017.09.28
Comments