我想看看是否可以使用注释来评估用户是否已登录。
实施例
@AuthRequired
public String myProtectedArea() {
return View("view/protectedArea"); // If user is NOT authenticated, return "view/login"
}
答案 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)