복붙노트

[SPRING] 스프링 보안 - / j_spring_security_check로 디스패치

SPRING

스프링 보안 - / j_spring_security_check로 디스패치

나는 스프링 보안을 갖추고 login.jsp를 통한 로그인은 완벽하게 작동한다.

이제는 URL을 기반으로 로그인 한 사용자를 자동으로 가져와야합니다 (Single Sign On과 유사). 기본적으로 URL에 기본적으로 암호화 된 코드 인 경로 매개 변수가 있습니다. 자동 로그인을 수행하기 위해이 코드를 처리합니다.

내가 올바른 패스 매개 변수를 가지고 있는지 확인하기 위해 LoginController를 수정하려고합니다.이 사용자 이름과 암호를 사용하여 "forward : / j_spring_security_check? j_username ="+ username + "& j_password ="+ password

그러면 다음 오류와 함께 login.jsp로 연결됩니다. 로그인 시도가 실패했습니다. 다시 시도하십시오. 원인 : 인증 방법이 지원되지 않음 : GET

나는 또한 "redirect : / j_spring_security_check? j_username ="+ username + "& j_password ="+ 패스워드로 시도했지만 도움이되지 않았다.

/ j_spring_security_check에 대한 호출은 POST이지만 전달 : & redirect :는 GET을 수행하므로 내 LoginController에서 POST로 / j_spring_security_check에 어떻게 디스패치 할 수 있습니까?

감사

해결법

  1. ==============================

    1./ j_spring_security_check URL은 UsernamePasswordAuthenticationFilter에 매핑되어 요청을 처리합니다.

    / j_spring_security_check URL은 UsernamePasswordAuthenticationFilter에 매핑되어 요청을 처리합니다.

    UsernamePasswordAuthenticationFilter에서 기본적으로 postOnly는 true로 설정됩니다.

    postOnly를 false로 설정 한 spring-security.xml의 다음 변경 사항이 적용되었습니다.

    <bean id="authenticationFilter" 
          class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"
          p:postOnly="false" />
    

    또한 web.xml에서 다음 구성이 필요합니다.

    <filter-mapping> <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    
  2. ==============================

    2.getMethod에 대해 "GET"대신 "POST"를 리턴하는 요청 랩퍼를 사용하여 점검을 생략 할 수 있습니다.

    getMethod에 대해 "GET"대신 "POST"를 리턴하는 요청 랩퍼를 사용하여 점검을 생략 할 수 있습니다.

    그러나 수표는 이유가 있습니다. 일반적으로 자격 증명을 URL 매개 변수로 보내는 것은 나쁜 습관으로 간주됩니다. 암호화 된 매개 변수를 사용하는 경우에도 암호화되지 않은 인증 자격 증명을 보내는 사람은 누구나이를 사용하여 인증 할 수 있으므로 기술적으로는 암호화되지 않은 인증 자격 증명을 보내는 것과 같습니다.

  3. from https://stackoverflow.com/questions/15544398/spring-security-dispatch-to-j-spring-security-check by cc-by-sa and MIT license