我正在构建一个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();
}
}
这取决于您希望如何处理安全性和导航。如果使用声明性RBAC(@RolesAllowed
),则只能通过JAXRS ExceptionMapper控制响应。您需要知道当用户无法访问所需资源时引发的异常;例如,如果用户拥有有效的令牌,但不满足@RolesAllowed
约束,则它将是io。夸克斯。安全禁止例外
,如果他没有通过有效的凭证,则io。夸克斯。安全未授权异常
。
当您知道异常时,您可以定义ExceptionMapper(确保通过@priority
设置正确的优先级,因为类路径上可能有其他异常映射器,例如Quarkus在开发模式下提供的异常映射器)。
实际的响应处理取决于客户端是什么:如果它是浏览器,那么您可能希望返回303
或302
重定向响应,其中位置
头包含您的登录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到底应该做什么? 谢谢 编辑: 现在使用