java - 给方法添加注解,说明是否允许运行

标签 java security annotations jersey

我已经在 java 中实现了我自己的安全框架的一部分,但我遇到了一个小问题。

我希望能够检查用户是否有权访问某个方法。 我可以通过简单地在方法内部添加一个检查来做到这一点,如下所示:

@GET
public Response getResource() throws Exception
{
    if (AuthUtils.isAuthenticated(request, "ROLE1", "ROLE2"))
        return Response.ok("Hello World!").build();
    else
        return Response.status(HttpServletResponse.SC_UNAUTHORIZED).build();
}

在其中提供有权使用该函数的角色列表。

然而在理想的世界中,我想做如下的事情

@Secure(roles = {"ROLE1", "ROLE"})
@GET
public Response getResource() throws Exception
{
    return Response.ok("Hello World!").build();
}

默认情况下,它会在用户没有正确角色的情况下对所有用 @Secure 注释的方法返回未经授权的响应。

Java 可以实现这样的功能吗?如果是,怎么做?

最佳答案

如果您使用的是 Jersey 2.x,只需使用 RolesAllowedDynamicFeature。您需要在您的应用程序中注册它。这将处理授权。您将使用注释 @RolesAllowed。它可以在类级别或方法级别进行

@RolesAllowed({"ROLE1", "ROLE"})
@GET
public Response getResource() throws Exception

如果您使用 Servlet 身份验证,则角色将填充到 HttpServletRequest#getUserRoles 中。在这里您不需要做任何其他事情。从这段代码的外观来看,我假设您正在使用 servlet 安全性

if (AuthUtils.isAuthenticated(request, "ROLE1", "ROLE2"))

我猜 requestHttpServletRequest

如果您不使用 Servlet 安全性,那么要使其正常工作,您需要使用 Jersey filter设置 SecurityContext。 Jersey 将使用 SecurityContext 来检查角色。您可以在 this post 中查看示例.

另请参阅:

关于java - 给方法添加注解,说明是否允许运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44070136/

相关文章:

java - 使用 NSSM 在 Windows 7 上安装 Java 服务

基本小程序的 Java 安全漏洞

c# - 如何使用 C# 从 ASP.NET 检索 MAC id

java - 注释保留策略 : what real benefit is there in declaring `SOURCE` or `CLASS` ?

java - Java注释处理器是否能够删除注释代码

javascript - 为什么从 JavaFX 插入 DOM 时 JavaScript 方法不执行?

java - Spring Boot JAR 应用程序未从资源文件夹中读取 chromedriver.exe

java - Spring Boot 和 Hibernate : Start an application even if a connection to the database is not available

javascript - 我可以避免向未登录的客户端提供所有 js 吗?

用于具有 @Deprecated 等语义的代码风格的 Java 注释