获取有关委托人的信息

时间:2013-12-05 16:58:04

标签: java security java-ee spring-security

我有几种方法可以使用这个签名

来提供一个宁静的Web服务
public @ResponseBody SomeObject someMethodSignature(Principal principal){

鉴于它是遗留代码,有没有办法从主体获取其他信息(Principal是来自java.security的接口只有一个有用的方法getName())除了名称之外没有需要将其他任何东西传递给方法作为参数?像权限和类似的东西?

感谢

3 个答案:

答案 0 :(得分:2)

如果您正在使用Spring Security,那么Principal对象应该是Spring Security的Authentication接口的实例。请参阅API Javadoc

这意味着您可以强制转换主体并在其上调用getAuthorities方法,如此

((Authentication)principal).getAuthorities();

请注意,HttpServletRequest的其他与安全相关的方法也会被覆盖,因此您也可以更改方法以获取请求对象并调用,例如isUserInRole方法(如果符合您的要求) 。这样可以避免在类中添加对Spring Security的依赖。

答案 1 :(得分:1)

Principal只带有名称(通常是Authentication基础结构返回的登录名),没有更多的信息可以获得。但是,您检查JAAS reference您将看到其他类带有信息,例如AuthPermission用于保存名称以识别您的Principal有权使用的内容,因此,我们使用此类来激活(通常)菜单选项。

答案 2 :(得分:1)

接口Principal不包含很多信息,但可以实现。与TomcatWeblogic一样,您可以找到更多有趣的信息。