2009-05-07 1 views
3

Tomcat에서 사용자 지정 영역을 만들려고합니다. 내 문제는 SessionAttributeListener가 세션에 추가 된 객체가 직렬화 가능 여부를 확인하는 프레임 워크의 일부로 존재하며 세션이 무효화되는 등 문제가 발생하는 경우 해당 세션을 무효로하는 것입니다.Tomcat : java.security.Principal 구현

org.apache.catalina.realm.GenericPrincipal이 직렬화되지 않았기 때문에 Principal과 Serializable을 구현하는 자체 클래스를 작성하려고했습니다. 그럼 내가 그것에 대해 거짓, 사용자가해야 다른 역할을 얻을

request.isUserInRole("user") 

사용하려고하는 경우를 제외하고이 잘 될 것 같다. 내 Valve 클래스에서 CustomPrincipal에 대한 GenericPrincipal을 교체하면 true를 반환합니다. 그래서 내 질문은 다음과 같습니다.

  1. false 반환의 원인은 무엇입니까?
  2. GenericPrincipal 대신 자신의 클래스를 어떻게 사용합니까?
  3. 이렇게해도 될까요?
  4. 편집

: 그것은 또한 Serializable를 구현 제외하고 그냥 명확하게하기 위해, 나는 실제로 이미 구현, CustomPrincipal의 코드는, 정확히 GenericPrincipal과 동일합니다.

request.setUserPrincipal(new CustomPrincipal(args...)); 

하지만 내가

request.setUserPrincipal(new GenericPrincipal(args...)); 

request.getUserPrincipal (에 대한 모든 호출을 수행 할 때) 반환 CustomPrincipal I을 내 밸브에 나가있을 때 에 request.isUserInRole ("사용자")는 false를 돌려줍니다 그 수업을 사용하고 있습니다.

답변

1

더 많은 문맥을 제공해야합니다. 그러나 교장 선생님은 어쨌든 초록을 의도 한 것입니다. 예를 들어 KerberosPrincipal은 Principal과 Serializable을 모두 구현하므로 일부 방법이 있습니다. Pricipal로 식별 - - 그 역할에 정말

은 무엇 대해 isUserInRole 않는 것은 사용자가 있는지 확인하는 구현 클래스에 요청을 래핑합니다. 그래서 가장 먼저 getUserPrincipal을 호출하고 서블릿 이 현재의 Principal 인이라고 생각하는지 보겠습니다.