2013-10-22 2 views
1

내 애플리케이션의 로그인 기능을 구현하기 위해 스프링 보안을 사용하고 있습니다. 대부분의 경우 스프링 보안은 예상대로 잘 작동합니다. 그러나 때때로 그것은 미쳐 가고 있습니다. 그 당시 나의 디자인이없는 로그인 페이지는 사용자 이름과 암호 텍스트 박스로 열리고 있습니다. 내가 완전히 로그인 페이지가 아닌 로그인 페이지에서 임의의 png 또는 js 파일이 열리고 있습니다. 그런 다음 해당 js 또는 png 부분을 내 URL에서 제거하고 Enter 키를 누릅니다. 그 당시 완전히 형성된 로그인 페이지가 열리고 응용 프로그램이 예상대로 원활하게 작동합니다. 내 봄 보안 부분에 무슨 일이 벌어지고 있는지 모르겠다. 누군가 제발 도와주세요. 아래는 스프링 보안에 대한 나의 구성입니다.스프링 보안이 때때로 이상하게 작동합니다.

<http auto-config="true" use-expressions="true"> 
    <!-- <intercept-url pattern="/loadISearch" access="ROLE_ADMIN" /> --> 

    <intercept-url pattern="/" access="permitAll" /> 
    <intercept-url pattern="/accessdenied**" access="permitAll" /> 
    <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" /> 

     <form-login login-page="/" default-target-url="/dashboard1" authentication-failure-url="/accessdenied" /> 
     <logout invalidate-session="true" logout-success-url="/" /> 

    </http> 

답변

1

내 생각 엔 다음은 무슨 일이 일어나고 있는지입니다 :

    페이지에서 로그가 CSS/이미지 파일에 대한 액세스를 거부한다
  • 봄 보안 스타일링을 위해 CSS와 이미지를 사용
  • 당신 때문에 그들에게 접근권을 부여하지 않았다. 이러한 이유로 로그인 페이지가 예상 한 것과 다르게 보이고 인식 할 수 없게됩니다.
  • CSS/이미지가 브라우저에 의해 캐시되기 때문에 로그인 페이지가 정상적으로 보일 때가 있습니다. 브라우저가 CSS/이미지를 캐싱 했으므로 컨테이너에 리소스를 요청하지 않고 Spring Security가 리소스를 보호 할 수 없으므로 로그인 페이지가 예상대로 렌더링됩니다.
  • Spring Security의 기본 정책은 사용자가 인증하기 전에 마지막으로 요청한 것을 저장하고 거기에 사용자를 보내는 것입니다. 로그인 페이지가 보호 된 리소스 (예 : CSS, 이미지 등)에 대한 추가 요청을하기 때문에 인증 후 해당 페이지로 전송됩니다. 요청이 비동기 적이기 때문에 결과가 비 결정적 일 수 있습니다.

문제를 해결하려면 로그인 페이지에서 사용하는 모든 리소스에 대한 액세스 권한을 부여해야합니다. 예를 들어,/resources /라는 폴더에 모든 CSS, JS 및 이미지를 배치하면 다음과 같이 구성을 수정할 수 있습니다.

<http auto-config="true" use-expressions="true"> 
    <intercept-url pattern="/resources/**" access="permitAll" /> 

    <intercept-url pattern="/" access="permitAll" /> 
    <intercept-url pattern="/accessdenied**" access="permitAll" /> 
    <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" /> 

    <form-login login-page="/" 
       default-target-url="/dashboard1" 
       authentication-failure-url="/accessdenied" /> 
    <logout invalidate-session="true" logout-success-url="/" /> 

</http> 
+0

좋은 통찰력을 제공 해주셔서 대단히 감사합니다. –

관련 문제