我有几种方法可以使用这个签名
来提供一个宁静的Web服务public @ResponseBody SomeObject someMethodSignature(Principal principal){
鉴于它是遗留代码,有没有办法从主体获取其他信息(Principal
是来自java.security
的接口只有一个有用的方法getName()
)除了名称之外没有需要将其他任何东西传递给方法作为参数?像权限和类似的东西?
感谢
答案 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)