Grails 3 Spring Security 预身份验证

2024-03-26

我的应用程序使用 Grails 3。我正在尝试进行预身份验证,如此处所述article https://docs.spring.io/spring-security/site/docs/3.0.x/reference/preauth.html,但是我遇到了困难,因为我不知道如何禁用由Grails 3 Spring 安全插件 http://grails-plugins.github.io/grails-spring-security-core/v3/index.html.

这是我当前的场景:用户 A 访问我的网页。我想解析请求的标头并取出角色和用户名信息。如果用户名或角色为空,我会将用户重定向到某个网关。简单来说,我只想通过调用插件提供的静态规则来使用 spring security 进行授权。 IE

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
    [pattern: '/serviceb/**', access: "hasAnyRole('ROLE_COOL','ROLE_UNCOOL')"],
    [pattern: '/cools/**', access: ['ROLE_ADMINS']],
    [pattern: '/*', access: 'isAuthenticated()']
]

这就是我的原因do not需要 spring security 来执行任何登录功能,因为第一篇文章 https://docs.spring.io/spring-security/site/docs/3.0.x/reference/preauth.html状态,我们只能将其用于身份验证。

我尝试过的:

首先,我删除了 application.groovy 文件中的所有与身份验证相关的调用(在运行插件快速启动时默认创建),即连接字符串、搜索过滤器,但是not静态规则

接下来,我尝试使用这两篇​​文章提供的解决方案:on stack https://stackoverflow.com/questions/25897039/grails-pre-authenticated-scenario和这个on blog http://blog.serindu.com/2011/05/26/grails-spring-security-using-preauthenticated-authentication-provider/.

我创建了一个 Filter 来扩展 AbstractPreAuthenticatedProcessingFilter

package Cool.service.authentication
import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter
import javax.servlet.http.HttpServletRequest

class CGAuthenticationFilter extends AbstractPreAuthenticatedProcessingFilter {
    @Override
    protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) { "username" }

    @Override
    protected Object getPreAuthenticatedCredentials(HttpServletRequest request) { "N/A" }
}

我的启动配置现在看起来像这样:

import grails.plugin.springsecurity.SecurityFilterPosition
import grails.plugin.springsecurity.SpringSecurityUtils

class BootStrap {

    def init = { servletContext ->
        SpringSecurityUtils.clientRegisterFilter('CGAuthenticationFilter', SecurityFilterPosition.PRE_AUTH_FILTER.order)
    }
}

我的 Spring 资源如下所示:

import Cool.service.authentication.CGAuthenticationFilter

beans = {
    myAuthenticationFilter(CGAuthenticationFilter) {
        authenticationManager = ref('authenticationManager')
        checkForPrincipalChanges = true
    }
}

最后,将此行添加到我的 spring 安全插件的 application.groovy 配置中:

grails.plugin.springsecurity.providerNames = ['preAuthenticatedAuthenticationProvider', 'anonymousAuthenticationProvider']

然而,当我尝试运行应用程序时,我收到一个超级通用错误,其中服务器“无法”启动并且java返回一个非零值。这让我相信我正朝着错误的方向前进,并且实施完全错误


为了解决这个问题,我不得不更改一些文件。首先,我的 Bootstrap 文件现在包含以下 init 块:

SpringSecurityUtils.clientRegisterFilter('requestHeaderAuthenticationFilter', SecurityFilterPosition.PRE_AUTH_FILTER)

我的 beans (resources.groovy) 文件现在包含:

userDetailsService(grails.plugin.springsecurity.userdetails.GormUserDetailsService) {
    grailsApplication = ref('grailsApplication')
}

userDetailsByNameServiceWrapper(org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper) {
    userDetailsService = ref('userDetailsService')
}

preAuthenticatedAuthenticationProvider(org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider) {
    preAuthenticatedUserDetailsService = userDetailsByNameServiceWrapper
}

requestHeaderAuthenticationFilter(Cool.service.authentication.GCHeaderAuthenticationFilter) {
    authenticationManager = ref('authenticationManager')
}

除此之外,其余配置都是正确的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Grails 3 Spring Security 预身份验证 的相关文章

  • 通过 facebook 登录后设置 spring security 记住我 cookie

    我正在构建一个移动网络应用程序 可以选择通过 facebook twitter 登录 我希望应用程序通过 Spring security 的记住我功能记住登录 以便用户需要经常登录 我有可以调用 facebook 并获取可识别用户身份的 a
  • Grails:如何更改默认视图位置?

    我有控制器AdminTagController 默认情况下视图将位于 adminTag文件夹 是否可以将此控制器的默认文件夹更改为 admin view 我可以为每个方法指定视图 但这并不酷 谢谢 可以用以下命令更改它拦截器后 http g
  • 在 Grails 中,域类中有像 onLoad() 这样的东西吗?

    Guys 我有以下域类 class Product String name String productRecord static transients productRecord ProductRecord 是根据 Product 实例的
  • Grails 中数据库迁移的良好工作流程是什么?

    我想使用数据库迁移 http grails org plugin database migration用于数据库迁移的 grails 插件 当我第一次启动 Grails 应用程序时 所有数据库表都会自动创建 我的 DataSource gr
  • Spring Security 帐户锁定

    您好 我有一个使用 Spring webflow 和 Spring Security 的 j2ee 应用程序 我想实现帐户锁定 以便在密码失败 3 次后帐户将被锁定 我该如何实现这个 你能用一个认证失败处理程序 http static sp
  • Grails 2.0 中的 dateCreated、lastUpdated 字段

    我有一个使用 Grails 1 3 7 的应用程序 我刚刚将其迁移到 Grails 2 0 该应用程序利用自动dateCreated and lastUpdated用于管理与对象的创建和修改相关的时间戳的字段 升级后 我收到以下错误 Run
  • 带有 Grails 的 AOP

    我想在我的 Grails 项目中创建自定义日志记录注释 My code class MyService AuditLog def method1 println method1 called method2 AuditLog def met
  • 必须指定 Spring Security 身份验证管理器 - 用于自定义过滤器

    我正在尝试创建自定义用户名密码身份验证过滤器 因为我需要验证来自两个不同来源的密码 我正在使用 Spring Boot 1 2 1 和 Java 配置 我在部署时遇到的错误是 Caused by org springframework be
  • 如何阻止浏览器在选项卡之间共享会话?

    How to NOT在多个浏览器选项卡之间共享会话 我在 JSP Servlet 应用程序中使用 Spring Security 我想知道 我们如何使用 Spring Security 实现用户在更改浏览器选项卡时被迫再次登录的行为 免责声
  • 嵌入式 Jetty 无法识别 Spring MVC Security

    我正在开发一个启动嵌入式 Jetty 服务器的 Spring 应用程序 然后 它将 Spring MVC Web 应用程序 部署 到该 Jetty 服务器 多个控制器都运行良好 但我无法将 Spring Security 添加到 Web 应
  • 将每个 http 块映射到特定的身份验证提供程序

    我想根据用户的上下文路径来设置 Spring Security 配置 如果用户反对某个网址http 路径1 资源1 http path1 resource1我想将他们定向到特定的身份验证提供商 如果他们进来http 路径2 资源2 http
  • 如何重写 GORM/Grails 的 addTo* 和 RemoveFrom* 方法?

    我尝试重写 Grails GORM 提供的动态方法 addTo 但它似乎不起作用 这是代码 class Match static hasMany players Player matchPlayers MatchPlayer void ad
  • Auth0 - 无法检索远程 JWK 设置:读取超时

    我正在遭受这一痛苦 无法检索远程 JWK 设置 读取超时 我正在使用 Java 11 和 Spring boot 2 5 3 对于依赖项 弹簧安全 oauth2 何塞 5 5 1 spring boot starter oauth2 客户端
  • 我无法将我的 web 应用程序更新到 Spring Boot 2.6.0(2.5.7 可以工作,但 2.6.0 不行)

    正如标题中提到的 我无法将我的 web 应用程序更新到 Spring Boot 2 6 0 我使用 Spring Boot 2 5 5 编写了我的 web 应用程序 一切都运行良好 如果我使用这个新标签更新 pom xml 文件
  • grails 上的同步块在 Windows 上有效,但在 Linux 上无效

    我有一个 grails 应用程序 它依赖于服务中的同步块 当我在 Windows 上运行它时 同步按预期工作 但当我在 ams linux 上运行时 会出现 StaleObjectStateException 该问题在以下示例中重现 cla
  • Spring Boot中使用自定义令牌进行身份验证

    我需要保护我的 Spring Boot 应用程序 这就是我所拥有的 一个 Spring Boot 应用程序 公开了一些 REST API 与公开的 api 通信的前端 前端发送用于身份验证的自定义身份验证令牌 存储自定义身份验证令牌的数据库
  • 构建战争时如何包含额外文件?

    我正在尝试添加一个目录 garils app store 对我的战争就像这样BuildConfig groovy grails war resources stagingDir args gt copy file grails app st
  • 是否可以使 Spring Security 会话失效?

    我正在使用 Tomcat 6 0 32 Spring Security 3 0 5 在我的网络应用程序中 某些用户可以更改其他用户的权限 发生这种情况时 我想使权限已更改的用户的任何会话无效 这可能吗 如果可能的话怎么办 通常 您无法在更改
  • Grails - 如何对 addTo* 进行单元测试

    是否可以在 Grails 中对 addTo 函数进行单元测试 感谢您的帮助 文档第 9 1 节中说 http grails org doc latest guide 9 20Testing html 9 1 20Unit 20Testing
  • grails/mysql 时区更改

    完成更改应用程序时区的最佳方法是什么 在我看来 必须发生以下情况 服务器 TZ 已被系统管理员更改 mysql必须重新启动 数据库中每个基于时间的列都必须使用convert tz 或等效方法更新所有值 因此 要么必须编写一个 mysql 脚

随机推荐

  • 为什么使用异常而不是 if...else

    例如 在 数组索引越界 异常的情况下 为什么我们不提前检查数组长度 if array length lt countNum logic else replace using exception 我的问题是 为什么选择使用异常 以及何时使用异
  • 什么时候是PersistentDict,什么时候是Folder?

    我什么时候应该使用持久字典 什么时候应该使用文件夹 它们在更新 内部结构 性能等方面有何区别 A PersistentMapping只是 python 的一个实现dict类型 通过标准库UserDict基类 针对 ZODB 的持久性语义进行
  • 在 viewDidUnload 和 dealloc 中都释放?

    一段时间以来我一直假设viewDidUnload当控制器被释放时总是被调用 这是一个正确的假设吗 我刚刚探索了一些奇怪的事情 并在我的控制器中设置了一个断点viewDidUnload这是dealloc 看起来dealloc被称为 但是vie
  • Android Studio更新:安装区域(studio.exe | uninstall.exe)中发现一些冲突

    当我启动 Android Studio 时 它会显示有关 1 1 版本新更新的弹出窗口 但是当我开始更新时 下载所有补丁文件后 重新启动时 它显示以下错误 我几乎在 Google 和 Stackoverflow 上到处搜索 已经有两个问题了
  • 我正在尝试在 boto3 周围输入注释,但模块“botocore.client”没有属性“EC2”

    我正在围绕 boto3 编写自己的包装器 以实现快速触发功能 我正在尝试输入注释内容boto3 session client ec2 返回 调试器说是
  • 给新手关于 N 层应用程序的建议

    好的 各位 这是给你们的另一篇 我开始涉足 n 层应用程序世界 我已经阅读了一些有关该主题的内容 一般建议是 n 层应用程序的目标是抽象层间功能 因此 基于此 在 n 层应用程序中 常规模型是 Data Access gt Business
  • 找到两个相似波形之间的时间偏移

    我必须比较两个时间与电压波形 由于这些波形源的特殊性 其中一个波形可以是另一个波形的时移版本 怎样才能知道是否有时移 如果是的话 多少钱 我正在 Python 中执行此操作 并希望使用 numpy scipy 库 scipy 提供了一个相关
  • 通用数组列表冒泡排序问题

    我知道有内置例程 但作为一名学习者 我想使用自己的设备进行排序 并且由于排序已经过时了 所以我决定尝试制作自己的例程generic如果我弄清楚它们在 Java 中的工作原理 我可以将其用于数字或字符串甚至日期的排序例程 这就是我所拥有的 将
  • 在 python 中实现 Bron–Kerbosch 算法

    对于一个大学项目 我正在尝试实施布隆 克博什算法 http en wikipedia org wiki Bron Kerbosch algorithm 即列出给定图中的所有最大团 我正在尝试实现第一个算法 不进行旋转 但是我的代码在测试后并
  • 如何更改 Netbeans 缓存目录?

    有什么方法可以更改 Netbeans 7 0 1 缓存目录吗 我只是不想更改几个应用程序的缓存 临时目录 其中之一是 NetBeans 对于 Netbeans 7 来说这似乎是不可能的 除非您重新定位整个用户目录或按照 MadWizard
  • 检查 AngularJs 指令中属性是否存在

    可以检查给定属性是否存在于指令中 理想情况下使用隔离范围 或者在最坏的情况下使用属性对象 指令看起来像这样
  • 信号执行期间的 sigprocmask

    我目前正在研究使用sigprocmask阻止某些信号 在这种情况下 SIGALRM and SIGCHLD 当关键代码段正在执行时 与这些信号关联的两个信号处理程序都将访问和修改中央数据结构 因此在主进程处理该数据结构时阻止它们访问它至关重
  • 将 youtube api 帮助程序集成到 iOS 时出现错误 258

    https developers google com youtube v3 guides ios youtube helper https developers google com youtube v3 guides ios youtu
  • 编写 SQL Server 权限脚本

    我想将我对存储过程和其他内容设置的所有权限从开发数据库复制到生产数据库 通过 SSMS GUI 工具手动完成这一切非常麻烦 更不用说容易出错 因此 我正在寻找一种方法 可以直接转储在一个数据库中设置的权限 并将这些相同的权限应用于单独的数据
  • 编辑所有视图和存储过程,查找和替换?

    有没有一种简单的方法可以在我的 SQL Server 数据库中的每个视图和存储过程中查找和替换字符串 我需要将 X United Kingdom 替换为 X UK 您需要查看sysobjects和syscomments 视图和存储过程的文本
  • 如何在 Google Visualization API 中进行多行注释?

    我正在尝试使用谷歌可视化 API 生成带注释的 LineChart 当我让它工作时 我希望能够在可能的情况下使注释具有换行符 不幸的是 Google 的 API 似乎忽略了任何换行信息并将所有内容显示在一行上 有人想出解决这个问题的办法吗
  • R htmlParse XML 中的编码问题

    我尝试抓取网站但无法处理此编码问题 putting together the url search str lt allintitle amphibian richness OR diversity url lt paste http sc
  • 如何在类库中定位EF生成的元文件?

    我已将 Entity Framework 4 模型移至类库 元文件构建到 bin Debug 我用来在类库中定位元文件的连接字符串是什么 我努力了
  • 将多个谓词函数组合为一个

    是否可以编写例如 defn multiple of three n zero mod n 3 defn multiple of five n zero mod n 5 into multiple of three or five 所以我可以
  • Grails 3 Spring Security 预身份验证

    我的应用程序使用 Grails 3 我正在尝试进行预身份验证 如此处所述article https docs spring io spring security site docs 3 0 x reference preauth html