Spring Security:如何处理GrantedAuthority所需的建议

时间:2009-05-05 13:45:28

标签: java spring spring-security

对于Spring Security应用程序中的GrantedAuthority对象,我有一个问题。我正在寻找处理事情的好方法。首先,我试图描述我的担忧,如果有任何事实错误,请不要犹豫,我只会很高兴。

Spring Security使用GrantedAuthority实例充当应用程序不同部分的授权令牌。

默认情况下,GrantedAuthority可以将自身显示为String。使用 @Secured(“ROLE_NAME”)保护方法时,或者使用Spring XML配置 URL安全或检查 HttpServletRequest请求时以编程方式在 if(request.isUserInRole(“ROLE_NAME”)){..} 中,它总是用于指定要检查的权限的字符串。

我想知道在应用程序的几个地方使用静态字符串的含义。如果更改了角色名称,则开发人员必须查找所有旧字符串并更新它们。如果遗漏了一个String,那么就没有编译时错误,只是在运行时出现问题。

在Spring Security应用程序中处理GrantedAuthority对象时,根据您的最佳方法是什么?您的解决方案有哪些优点和缺点?

3 个答案:

答案 0 :(得分:2)

首先,如果可能,只在应用程序中的特定位置进行检查(例如,在请求开始时的HTTP拦截器),并且仅使用上述方法之一。这是一个很好的做法,因为您可以在用户获得授权时以权威方式了解。

如果无法做到这一点,请使用enums作为角色名称,并仅在枚举上进行比较。因此,如果您想在应用程序中找到所有用法,那么这是一个简单的搜索。

答案 1 :(得分:0)

我在这里看不到大问题。 GrantedAuthority不太可能更改密钥。只是不要将你的角色命名为ROLE_A。

另外,我个人更喜欢XML安全配置而不是注释。一般来说,将任何相关配置保存在一个地方看起来是个好主意。

答案 2 :(得分:-1)

在Spring和其他框架中(特别是对于动态语言)使用“Convention over Configuration”。如果您可以自由定义角色名称,则可以轻松找到需要更多代码的行。

坚持惯例。始终使用以下3个角色:ROLE_ANONYMOUS,ROLE_ADMIN和ROLE_USER。如果您需要另一个,请相应地命名并在所有场合使用它。文件很重要。

也导入了单元测试。在编译器未捕获错误的情况下,它可以帮助您。