gpt4 book ai didi

java - 是否可以仅通过重定向允许访问页面?

转载 作者:搜寻专家 更新时间:2023-10-31 20:31:55 25 4
gpt4 key购买 nike

我正在使用 Spring Boot 和 Thymeleaf 开发一个应用程序。

我的自定义登录页面中有以下代码段:

<p th:if="${param.logout}">Logged out successfully</p>

此段落与以下安全配置相关联:

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "*.css").permitAll()
.antMatchers("/myendpoint").authenticated()
.and()
.formLogin().loginPage("/login").permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.permitAll();
}

因此在注销后,用户将被重定向到 /login?logout 并显示注销消息。

我的问题是,当用户通过简单地将 http://myserver:8080/login?logout 显式导航到 /login?logout 时,也会显示此消息浏览器。

是否可以阻止用户直接访问 /login?logout(从而仅在实际注销发生时才显示消息)?

最佳答案

经过一些研究,我想到了使用 RedirectAttributesaddFlashAttribute() 在注销时将数据传递到我的登录页面。

因此,我没有将 logout 设置为查询参数,而是从我的安全配置中删除了 Spring 的默认注销处理:

http
.authorizeRequests()
.antMatchers("/", "*.css").permitAll()
.antMatchers("/myendpoint").authenticated()
.and()
.formLogin().loginPage("/login").permitAll();

并在我的 Controller 中创建了以下自定义注销端点:

@PostMapping("/logout-user")
public String logout(HttpServletRequest request, RedirectAttributes attrs) {
new SecurityContextLogoutHandler().logout(request, null, null);

// this attribute will be received in /login
attrs.addFlashAttribute("logout", true);

return "redirect:/login";
}

所以我将注销请求发送到此端点并检查 /login 中的 logout 属性,以在适当的时候显示注销消息:

<p th:if="${logout}">Logged out successfully</p>

它似乎工作完美。

关于java - 是否可以仅通过重定向允许访问页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50292876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com