Java 对某些已登录客户的只读访问| Spring MVC
我知道这似乎是一个奇怪的要求,但当客户需要时,这意味着我们别无选择。 我正在开发一个web应用程序(电子商务),需要注册一个新客户,到目前为止,一切都很正常。 但是,在以下情况下有要求Java 对某些已登录客户的只读访问| Spring MVC,java,spring,jakarta-ee,spring-mvc,Java,Spring,Jakarta Ee,Spring Mvc,我知道这似乎是一个奇怪的要求,但当客户需要时,这意味着我们别无选择。 我正在开发一个web应用程序(电子商务),需要注册一个新客户,到目前为止,一切都很正常。 但是,在以下情况下有要求 如果客户使用特定的电子邮件id注册,他们将立即获得批准,并允许浏览、查看所有内容,并允许执行任何交易 对于其他一组客户,他们可以登录,但他们对配置文件部分具有只读访问权限,并且不能查看产品的价格(折扣价格),也不允许进行任何交易 由于这些用例不适用于特定类别,而是适用于整个web应用程序,我不确定我们如何才能最好
HandlerInterceptor
,它将在执行实际请求之前检查客户角色然后,如果用户缺少某个角色,您还可以通过指定不同的视图(或在同一视图中使用)来限制用户可以查看的数据和/或链接。我将创建新角色,并按照@peter-g的建议使用 如果您的电子商务是传统的web应用程序(服务器呈现的页面),则过滤URL不是最佳方法。在这种情况下,我将结合:
@PreAuthorize
注释放在对bean的入口调用中才有用。如果调用myService.methodA()
,并且此方法调用带注释的方法this.methodB()
(这是myService()
),则安全注释将无法工作。它们只在第一次调用onmyservice时起作用(在本例中放置在methodA()
)。这可以作为业务逻辑的安全防火墙如果您的后端是一个web API,您可以使用带有注释或XML/Java配置的URL过滤,并使用jackson视图(如果您使用JSON)或XSLT(如果使用XML)过滤输出。它允许更细粒度的控制和更内聚的安全实现。最好的方法是使用简单的基于角色的访问控制机制()。Spring安全性很好地支持这一点,并且易于使用 您应该创建一个新角色(例如“完全访问”),并根据其电子邮件地址将其分配给正确的用户。该角色应涵盖具有完全访问权限的用户,而不是您的问题所建议的具有只读权限的用户 您通常在UserDetailsService的实现中确定当前用户的角色。您可以使用org.springframework.security.core.authority.SimpleGrantedAuthority作为授权实现(在您的上下文中,授权与角色是相同的)。从UserDetailsService返回的授权存储在用户的身份验证对象中,并在用户会话有效期内可用 这种方法还允许您轻松地将用户从只读模式更改为完全模式(例如,在批准注册后),方法是在用户在批准后的下一次登录期间添加“完全访问”角色 一旦您填充了授权权限,您就可以使用声明式和编程式授权方式。对于编程授权(直接在代码中完成的授权),请使用例如:
if (request.isUserInRole("FULL_ACCESS")) {
// Only for users with full acccess
}
对于声明性授权(在配置文件中声明的授权或作为代码注释声明的授权),您可以使用
您也可以使用声明式保护URL,但前两种方法更合适。具有完全和只读访问权限的用户可以访问相同的URL,这使得这种技术很难用于您的用例
SpringSecurity还提供了一组可能有助于为不同类型的用户正确呈现UI的工具
您可以使用上述技术的组合来实施问题中提到的所有5个业务逻辑点。感谢您的输入……我知道授权标签……但我必须向所有客户显示链接/部分,只有具有只读访问权限的客户才能阅读。