当前位置: 首页 > 知识库问答 >
问题:

QUUKUS提供重定向网址,如果没有验证

尹英华
2023-03-14

我正在构建一个web ui,并决定通过cookie中的jwt获得auth。

我已经得到了最低限度的工作,但当我在一个角色后面保留一个页面时,页面(可以预见)不会加载。我希望能够告诉endpoint重定向到实际的登录页面,而不是不加载。这可能吗?理想情况下,我可以在endpoint上提供一个注释,说“如果未授权,请转到此处”。

设置web uiendpoint的代码:

@Traced
@Slf4j
@Path("/")
@Tags({@Tag(name = "UI")})
@RequestScoped
@Produces(MediaType.TEXT_HTML)
public class Index extends UiProvider {

    @Inject
    @Location("webui/pages/index")
    Template index;
    @Inject
    @Location("webui/pages/overview")
    Template overview;

    @Inject
    UserService userService;

    @Inject
    JsonWebToken jwt;

    @GET
    @PermitAll
    @Produces(MediaType.TEXT_HTML)
    public TemplateInstance index(
            @Context SecurityContext securityContext
    ) {
        logRequestContext(jwt, securityContext);
        return index.instance();
    }

    @GET
    @Path("overview")
    @RolesAllowed("user")
    @Produces(MediaType.TEXT_HTML)
    public TemplateInstance overview(
            @Context SecurityContext securityContext
    ) {
        logRequestContext(jwt, securityContext);
        return overview.instance();
    }
}

共有1个答案

鲍高扬
2023-03-14

这取决于您希望如何处理安全性和导航。如果使用声明性RBAC(@RolesAllowed),则只能通过JAXRS ExceptionMapper控制响应。您需要知道当用户无法访问所需资源时引发的异常;例如,如果用户拥有有效的令牌,但不满足@RolesAllowed约束,则它将是io。夸克斯。安全禁止例外,如果他没有通过有效的凭证,则io。夸克斯。安全未授权异常

当您知道异常时,您可以定义ExceptionMapper(确保通过@priority设置正确的优先级,因为类路径上可能有其他异常映射器,例如Quarkus在开发模式下提供的异常映射器)。

实际的响应处理取决于客户端是什么:如果它是浏览器,那么您可能希望返回303302重定向响应,其中位置头包含您的登录URL,以便将原始请求重定向到登录。未授权异常的一个示例

import io.quarkus.security.UnauthorizedException;

import javax.annotation.Priority;
import javax.ws.rs.core.*;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider//register it as jaxrs provider
@Priority(1)//lower number-higher prio
//exception mappers are selected on best match for the exception class
//so make sure you find the particular exception you want to map
public class MyUnauthorizedExceptionMapper implements ExceptionMapper<UnauthorizedException> { 
    @Context//you can inject JAXRS contextual resources here
    UriInfo crc;

    @Override
    public Response toResponse(UnauthorizedException exception) {
        System.out.println("User not authorized to access: " + crc.getRequestUri());
        return Response //seeOther = 303 redirect
                .seeOther(UriBuilder.fromUri("/someLogin")
                        //common pattern is to pass the original URL as param,
                        //so that after successful login, you redirect user back where he wanted
                        .queryParam("returnUrl", crc.getRequestUri())
                        .build())//build the URL where you want to redirect
                .entity("Not authorized")//entity is not required
                .build();
    }
}

另一个选项是,在endpoint内以编程方式处理身份验证,检查主体或当前JWTToken是否具有所需的属性,如果不够,则返回相应的响应,例如返回响应。请参见其他(“/login”)

这应该是可行的,但如果您的客户机正在执行POST请求,例如一些javascript代码,则可能会导致问题。通常,您最好从专用服务器为UI提供服务,使用Quarkus作为APIendpoint提供程序,通过HTTP/REST在UI和be之间进行通信。这样你就可以更好地控制自己的行为。

 类似资料:
  • 我的旧网址 我想如果用户输入 /cn网址Laravel将重定向到这个网址 这是我的拉威尔。htaccess在根文件夹中 我试试这个,但它确实有效 使现代化 现在. htaccess看起来像这样,但仍然没有工作重写引擎在重写规则 ^(.)$ 公共/1美元[L]重写规则^cn/(。)$en/1美元[L,R=301]

  • 问题内容: 当用户输入无效的url时,如何使node.js服务器将用户重定向到404.html页面? 我做了一些搜索,看起来大多数结果都是针对Express的,但是我想用纯node.js编写我的服务器。 问题答案: 确定“错误” URL的逻辑特定于您的应用程序。如果您正在执行RESTful应用,则可能是一个简单的文件未找到错误或其他错误。一旦弄清楚了,发送重定向就很简单:

  • 问题内容: 我在两个不同的计算机上有两个应用程序。在计算机A上的文件中,有一行如下所示: 该网址对和都适用。但是在计算机BI上,有一个类似的url写成: 由于某种原因,计算机B上的可以正常工作,但会挂起并且不会像计算机A上那样直接返回。我是否错过了某些事情?这两个文件对我来说都一样。 问题答案: 检查文件中的设置

  • 问题内容: 我有一个受身份验证保护的网址:www.domain.com/alias 请求时将返回另一个URL:www.another.com/resource.mp4(不受保护) 我想知道Java中是否存在一种将从给定URL返回真实URL的方法。像这样:第二=解决(第一) 我正在考虑加载第一个并尝试读入响应,也许是location属性,但是由于我不是Java专家,所以我想知道Java是否已经面临这

  • 我是新来的,用匕首。所以,我不能解决这个有什么问题。我只想问在这里解决它。 这是错误: c:\ Users \ MSI \ Documents \ MyAndroidProjects \ movie projects \ App \ build \ generated \ hilt \ component _ sources \ debug \ com \ example \ movie App

  • 我正在使用Spotipy从授权用户那里获取一些spotify数据,但我不知道如何授权我的帐户。 我认为服务器需要在http://www.myapp.com/callback托管一些东西,这是正确的吗?需要返回什么?也许我完全遗漏了一些东西...我对整个必需的重定向URI感到非常困惑... 我正在尝试制作一个没有网站的程序,那么我应该如何处理授权?重定向URI到底应该做什么? 谢谢 编辑: 现在使用