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

使用Spring Security避免Grails应用程序中的登录重定向

程成天
2023-03-14

我有一个Grails应用程序,它使用Spring Security Core进行身份验证和授权。该应用程序的主要目的是提供一个rest api,该api通过每个请求中通过Authorization头传入的令牌进行保护。这个令牌是在grails应用程序之外生成的,没有正式的“登录”阶段——每个请求都经过单独的身份验证和授权。

我已经实现了自己的身份验证过滤器和提供程序,它们似乎在令牌身份验证方面有效。问题是,对于成功的身份验证,当我只想静默地继续处理原始请求时,Spring 安全核心总是重定向到登录成功页面(通过 successHandler.defaultTargetUrl 配置):

  1. 用户请求 /rest/foo
  2. 自定义 Spring 安全过滤器匹配请求并处理它。如果授权标头良好,则调用 /rest/foo(当前重定向到 defaultTargetUrl),否则用户将转发到 /error。(最后一部分有效)

查看 AjaxAwareAuthenticationSuccessHandler 的源代码,这似乎是罪魁祸首,我看到我可以通过添加 targetUrlParameter(默认为 'spring-security-redirect)作为请求参数来设置 targetUrl,但这似乎既丑陋又没有必要。有没有办法使这项工作如愿以偿?我已经考虑过实现我自己的成功处理程序...这是正确的解决方案吗?我还有其他选择吗?

编辑:我尝试了自定义成功处理程序,方法是扩展AjaxAware身份验证成功处理程序并覆盖确定目标URL(请求,响应)并返回request.getServletPath()。这让我克服了最初的问题,但创建了一个无限重定向循环,大概是因为我需要无状态身份验证和默认重定向策略重定向到目标而不是转发的组合。

编辑#2:成功!使用这个SOF线程中的代码,我能够使自定义AuthenticationSuccessHandler解决方案工作。对于Grails用户,您还需要更新资源。像这样的groovy:

authenticationSuccessHandler(com.foo.bar.YourSuccessHandler){}

共有1个答案

淳于知
2023-03-14

您检查过基于Spring Security Core的Spring Security for Rest吗。

编辑

如果您想更改默认操作,更改config.groovy中目标参数的值是一种方法。

 类似资料:
  • 我使用ASP. NET Core 3.1 Blazor网络组装应用程序(Visual Studio 2019创建的默认应用程序)。 我连接了ASP。NET标识用于用户管理,添加了脚手架标识项(登录、注册等) 当我单击“注册”时,应用程序会正确重定向到 但是如果我单击登录,应用程序会重定向到 这是错误的(我希望<代码>https://localhost:44349/Identity/Account/

  • 我有一个使用Spring Security Core的Grails应用程序,运行在负载平衡器后面的AWS机器上。 负载均衡器解密 ssl 连接并转发到实例的端口 8080,添加相应的 X 转发 Proto 标头。 我希望任何对安全页面的直接访问都使用https重定向到登录页面。 例如,请求 https://myapp.com/private/page 应重定向到 https://myapp.com

  • 大佬们好,我现在想通过账号密码登录抖店. 获取对应的cookie保存到数据库,下次登录直接从数据库获取cookie进行登录(electron+vue作为前端,通过webview标签加载网页). 现在的问题是cookie在数据库获取成功,应用时提示网络错误需要重新登录,我应该使用全部的cookie还是部分cookie呢 以下是cookie列表 我也单独使用过其中的PHPSESSID进行设置,能够绕开

  • 问题内容: 对于典型的最典型的面向Internet的网站,当您通过关闭选项卡( 无需注销 )登录并离开该网站(然后 注销 ),然后再次访问时,可能不需要您重新指定凭据或登录,您可以直接登录。 这一切在后端如何发生?如何在我的JSF 2.1应用程序中启用这种机制? 在Tomcat7服务器上使用JSF 2.1 问题答案: 这基本上是通过一个长寿的cookie完成的。JSF API不提供此功能,因为它只

  • 问题内容: 建议在HTML页面中使用表格(现在已经有了CSS)? 表格有什么用途?表具有哪些CSS所没有的功能? 问题答案: 一点都不。但是将表格用于表格数据。只是不要将它们用于一般布局。 但是,如果您显示表格数据(例如结果或什至是表格),请继续使用表格!

  • 我已经设计了我自己的登录和注册页面,我想使用。如何使用它们而不是default。是否有任何API我可以调用或可能是我的后端会这样做?我还读到有用于keycloak的spring适配器,我可以使用它们吗?任何链接到任何例子都是好的。 我的第二个问题是,在注册时,我可以在中添加更多的用户详细信息,如地址、dob、性别吗?因为我的注册页面需要这些信息。