首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat:实现java.security.Principal

Tomcat:实现java.security.Principal
EN

Stack Overflow用户
提问于 2009-05-07 20:36:27
回答 1查看 4.6K关注 0票数 3

我正在尝试在Tomcat中创建一个自定义领域。我的问题是有一个SessionAttributeListener作为框架的一部分,它检查添加到会话中的任何对象是否是可序列化的,如果不是,则会导致问题.比如让会议无效。

因为org.apache.catalina.realm.GenericPrincipal是不可序列化的,所以我尝试编写自己的类来实现主体和可序列化。这似乎很好,除非试着使用

代码语言:javascript
复制
request.isUserInRole("user")

为此,我获得了false,以及用户应该具有的任何其他角色。如果我在阀门类中将GenericPrincipal替换为CustomPrincipal,它将返回true。所以我的问题是:

是什么导致了错误返回?

  1. 如何使用我自己的类来代替,我甚至可以这样做?

编辑:简单地说,我实际上已经实现了这个,CustomPrincipal中的代码与GenericPrincipal完全相同,但它也实现了可序列化。Request.isUserInRole(“用户”)在我的阀门中返回false:

代码语言:javascript
复制
request.setUserPrincipal(new CustomPrincipal(args...));

但当我做的时候

代码语言:javascript
复制
request.setUserPrincipal(new GenericPrincipal(args...));

当我使用request.getUserPrincipal()类时,对该类的任何调用都将返回CustomPrincipal。

EN

回答 1

Stack Overflow用户

发布于 2009-05-07 20:55:39

你需要给我们更多的背景。但是请注意,无论如何,KerberosPrincipal都是抽象的;例如,实现了主体和可序列化,所以有一些方法可以做到。

isUserInRole所做的是将一个请求封装到实现类,以查看用户--由主城市标识的用户--是否真的在这个角色中。因此,我认为第一件事可能是调用getUserPrincipal并查看servlet认为当前主体是什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/836889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档