본문 바로가기

Programming/Spring

Context Root 변경 시 Login 오류 in Spring Security

- 문제 : 기존 Context Root 를 변경하면서, 로그인이 되지 않고 403이 떨어지는 에러 발생

- 원인 : Spring Security default 옵션이 /login 으로 매핑되어 있음

              매핑을 바꿀경우 form-login 에 Parameter 추가 필요

- 해결 : form-login 에 login-processing-url="/test/login" 추가




Context-Root를 변경하면서, Login Form이 실행되지 않는 현상이 발생했다.


Spring Framework 을 사용하고 있었으며, 로그인은 Spring Security를 이용했었다.


각종 Filter들과 Interceptor가 잘못되었는지 온갖 설정을 다 바꾸어 보았는데 Login Form에 걸리지 않았다.


<!-- web.xml 설정 (Context-Root 변경 전)-->


...

<servlet>

<servlet-name>DispatcherServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>

classpath:/spring/context-*.xml

</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>DispatcherServlet</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

...


<!-- web.xml 설정 (Context-Root 변경 후)-->


...

<servlet>

<servlet-name>DispatcherServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>

classpath:/spring/context-*.xml

</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>DispatcherServlet</servlet-name>

<url-pattern>/test/*</url-pattern>

</servlet-mapping>

...



Login Url 이 "/login"에서 "/test/login" 으로 변경된 후, Spring Security 의 form-login에 설정한 Login Process 가 실행되지 않았다.


원인은 Spring-Security의 경우, form-login 은 deault로 "/login" 으로 설정되어있다.


만약 "/login"이 아닌 다른 루트를 설정하고 싶다면, login-processing-url 을 별도로 설정해주어야 한다.


<!-- context-security.xml 설정 (form-login 변경 전)-->


...

        <form-login login-page="/access-error" 
                    authentication-failure-url="/test/login-error"
                    default-target-url="/test/login-success" 
   always-use-default-target="true"/>
        <logout logout-success-url="/test/logout-success"/>

...


<!-- context-security.xml 설정 (form-login 변경 후)-->


...

        <form-login login-page="/access-error" 
                    login-processing-url="/test/login"
                    authentication-failure-url="/test/login-error" 
                    default-target-url="/test/login-success" 
                    always-use-default-target="true"/>
        <logout logout-success-url="/test/logout-success"/>

...



'Programming > Spring' 카테고리의 다른 글

STS(Spring Tool Suite) 다운로드 및 설치하기  (0) 2019.02.23