您可以使用Java Annotations来评估方法中的某些内容吗?

时间:2011-12-01 18:46:36

标签: java annotations

我想看看是否可以使用注释来评估用户是否已登录。

实施例

@AuthRequired
public String myProtectedArea() {
  return View("view/protectedArea"); // If user is NOT authenticated, return "view/login"
}

4 个答案:

答案 0 :(得分:3)

根据你的编辑: 检查这个SO帖子:

Scanning Java annotations at runtime

我仍然建议使用Spring Security,这是经过测试和保护的:

@PreAuthorize("hasRole('ROLE_USER')")
public String myProtectedArea() {
  return View("view/protectedArea"); 
}

注释将检查用户是否已登录并具有所需的凭据。

Spring Security的另一种方法是通过在spring.security-settings.xml中设置它来拦截URL模式:

    <intercept-url pattern="/view/protectedArea/*" access="hasRole('ROLE_USER')" />

我建议使用两者来最大限度地提高安全性。

在安全设置文件中,您可以告诉spring安全性将用户重定向到登录的位置。如果用户已经登录,您可以将他重定向到另一个页面:

<form-login login-page="/view/login.xhtml" default-target-url="/view/protectedArea/home.xhtml"
            authentication-failure-url="/view/login.xhtml" />

这是一个经过测试的框架,因此安全且通用。但是,如果您想要的不仅仅是标准行为,还需要进行一些设置。

答案 1 :(得分:1)

注释不会检查用户是否登录 - 注释是类/方法的元数据。某些东西仍然必须使用注释。

代码中的某些内容会检查方法是否使用@AuthRequired进行注释,如果是,则检查是否已登录,然后根据该方法执行该方法。

例如,Web应用程序可能会在过滤器,基本servlet,拦截器等中查找注释,并决定是否应继续请求过程。

答案 2 :(得分:0)

根据您创建的应用程序类型,您可以使用多种选项来定义特定方法的身份验证级别。

我很可能会向你Spring Security推荐这项任务。

以下示例之类的内容将是使用Spring Security进行配置后的最终结果。

 @Secured( {"USER_ROLE"} )
 public String getSecretData() {
      return "SECRET! SHHH!";
 }

然后,只有Spring Security验证的用户拥有您为注释提供的角色才有权调用该方法。

您可以使用Spring Security中的其他一些注释选项,例如@PreAuthorize。

答案 3 :(得分:0)