我正在使用Hibernate Web应用程序开发Struts2。我正在读书Practical Apache Struts 2 web 2.0 projects, by Ian Roughley。
在那本书中,作者展示了三种进行身份验证以访问Web资源的方法:基于容器的Acegi库和自定义模式。
因此,我的应用程序至少具有3种模式,并且必须根据此模式访问操作。
我采用自定义模式,因为它最适合我(考虑我正在使用Struts2开发)。
定制模式对struts.xml操作使用SecurityInterceptor
和SecureStack
。在要提供限制的操作类顶部添加@RequiresAuthentication
批注时,身份验证有效。
这是本书给出的RequiresAuthentication
注释的定义:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresAuthentication {
}
因此,作者明确指出,如果需要更复杂的基于角色的安全性,
注释可以增强以指定允许调用该动作的角色。
因此,我想知道在3种或更多模式下应如何实现此注释。
最佳答案
因此,将一些变量添加到自定义注释(例如角色)中,并在拦截器中检查其值。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresAuthentication {
public String[] roles();
}
但是您确实应该考虑使用某些安全性框架(例如Spring Security,Apache Shiro)而不是自定义解决方案。