보안 필터로 거부되는 URL을 저장하는 방법 사용자가 로그인 한 후에 이동하십시오.

StackOverflow https://stackoverflow.com/questions/470382

  •  19-08-2019
  •  | 
  •  

문제

인트라넷 웹 애플리케이션에 응용 프로그램 관리 보안을 사용합니다.

내 web.xml 파일에 다음 필터가 있습니다.

<filter>
  <filter-name>employeeAccessFilter</filter-name>
  <filter-class>security.AuthorizationFilter</filter-class>
  <init-param>
      <param-name>roles</param-name>
      <param-value>employee</param-value>
  </init-param>
  <init-param>
      <param-name>onError</param-name>
      <param-value>../index.jsp</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>employeeAccessFilter</filter-name>
   <url-pattern>/corporate/*</url-pattern>
</filter-mapping>

index.html 로그인 상자가 포함되어 있습니다. 사용자가 로그인하면 인트라넷의 대시 보드로 이동합니다. 필터가 잘 작동합니다.

다음 상황을 살펴보십시오.

  • 누군가는 다음과 같은 인트라넷 페이지가 포함 된 이메일을받습니다. http://appname.com/corporate/page.do?id=6
  • 그는 링크를 클릭하고, 기본 브라우저에는 쿠키가 저장되어 있고 자동으로 기록되며 페이지가 제대로 표시됩니다.

하지만:

  • 누군가는 다음과 같은 인트라넷 페이지 링크와 함께 이메일을받습니다. http://appname.com/corporate/page.do?id=6
  • 그는 링크를 클릭하고 기본 브라우저에는 앱 쿠키가 없으므로 자동으로 기록되지 않습니다. 그는 로그인 화면으로 리디렉션됩니다. 그는 로그인하지만 링크에 언급 된 페이지 대신 대시 보드로갑니다.

이것을 해결하는 쉬운 방법이 있습니까?

기본적으로 두 가지 아이디어가 있습니다.

b) - 기본 - 컨테이너 관리 보안을 사용하여 문제를 해결할 수 있습니다.

a) - 인증 필터 내에서 거부 된 URL을 요청 속성으로 저장하는 메커니즘을 구현하십시오. - 거부 된 URL을 로그인 상자의 숨겨진 필드로 넣습니다. - 항상 대시 보드 대신 필드 URL을 사용하려면 로그인 로직을 변경하십시오.

둘 다 약간의 일처럼 보입니까? 누구든지 더 나은 아이디어가 있습니까?

도움이 되었습니까?

해결책

로그인이 필요한 대부분의 사이트는 메소드 A를 사용하여 수행하는 것 같습니다. 예를 들어, 스택 오버플로에서 로그인이 필요한 페이지에 액세스하면 리디렉션됩니다. /users/login?returnurl=..., 이로 인해 a returnurl 로그인 양식에서 숨겨진 필드로 방출되는 필드.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top