Я пытаюсь создать собственное царство в Tomcat. Моя проблема заключается в том, что в рамках платформы есть SessionAttributeListener, который проверяет, является ли какой-либо объект, добавленный в сеанс, сериализуемым, а если нет, вызывает проблемы ... например, делает сеанс недействительным.
Поскольку org.apache.catalina.realm.GenericPrincipal не сериализуем, я попытался написать свой собственный класс, который реализует Principal и Serializable. Это, кажется, хорошо, за исключением, если затем попытаться использовать
request.isUserInRole("user")
Я получаю false за это и за любую другую роль, которую должен иметь пользователь. Если я заменю GenericPrincipal на CustomPrincipal в своем классе Valve, он возвращает true. Итак, мой вопрос:
- Что является причиной ложного возврата?
- Как использовать собственный класс вместо GenericPrincipal?
- Могу ли я это сделать?
Edit:
Просто чтобы прояснить, я фактически уже реализовал это. Код в CustomPrincipal точно такой же, как GenericPrincipal, за исключением того, что он также реализует Serializable.
request.isUserInRole ("user") возвращает false, когда в моем Valve у меня есть:
request.setUserPrincipal(new CustomPrincipal(args...));
но не когда я
request.setUserPrincipal(new GenericPrincipal(args...));
Любой вызов request.getUserPrincipal () вернет CustomPrincipal, когда я использую этот класс.