Ume*_*thi 6 java spring spring-mvc java-ee
我知道这似乎是一个奇怪的要求,但当客户想要它时意味着我们别无选择.我正在开发一个Web应用程序(电子商务),需要注册一个新客户,直到现在一切都运行良好.但是有以下情况需要
由于这些用例不适用于某些类别,而是适用于整个Web应用程序,因此我不确定如何才能实现这一目标.我想到的选择很少
HandlerInterceptor在执行实际请求之前检查客户角色的方法.但不确定我是否正在考虑正确的方向,以及我们应该如何强制执行只读访问此类客户.因为我们必须阻止这样的客户
最好的方法是采用简单的基于角色的访问控制机制(RBAC)。Spring Security 很好地支持了这一点并且易于使用。
您应该创建一个新角色(例如“FULL_ACCESS”)并根据用户的电子邮件地址将其分配给正确的用户。该角色应涵盖具有完全访问权限的用户,而不是您的问题所建议的具有只读权限的用户。
您通常在 UserDetailsService 的实现中确定当前用户的角色。您可以使用 org.springframework.security.core.authority.SimpleGrantedAuthority 作为您的 GrantedAuthority 实现(在您的上下文中,GrantedAuthority 与 Role 相同)。从 UserDetailsService 返回的 GrantedAuthorities 存储在用户的 Authentication 对象内,并在用户的会话有效期内可用。
此方法还允许您通过在批准后用户下次登录期间添加“FULL_ACCESS”角色,轻松地将用户从只读模式更改为完整模式(例如,在批准注册后)。
填充 GrantedAuthorities 后,您可以使用声明式和编程式授权方式。对于编程授权(直接在代码中完成授权),请使用例如:
if (request.isUserInRole("FULL_ACCESS")) {
// Only for users with full acccess
}
Run Code Online (Sandbox Code Playgroud)
对于声明性授权(在配置文件中声明的授权或作为代码注释的授权),您可以使用方面或注释来保护方法调用。
您还可以使用基于表达式的访问控制以声明方式保护 URL ,但前两种方法更合适。具有完全和只读访问权限的用户可以访问相同的 URL,这使得该技术很难用于您的用例。
Spring Security 还提供了一组授权 JSP 标签,可以帮助您为不同类型的用户正确呈现 UI。
您可以结合使用上述技术来强制执行问题中提到的所有 5 个业务逻辑点。
| 归档时间: |
|
| 查看次数: |
1476 次 |
| 最近记录: |