我可以将服务注入到 Grails 的过滤器中吗?

2024-03-20

我有一项服务可以在会话中获取和设置用户。如果有登录用户,我想将一些用户信息传递给每个视图,并认为过滤器是最好的方法,这样我就不必在每个控制器/操作中重复该信息。当我运行该应用程序时,出现以下错误:

Error creating bean with name 'userService': Scope 'session' is not active for the current thread

我的过滤器看起来像这样:

class SecurityFilters {
    def userService

    def filters = {
        setUser(controller:'*', action:'*') {
            before = {
                if (userService.isLoggedIn()) {
                    request.user = userService.getUser()
                } else {
                    request.user = null
                }
            }
        }
    }   
}

我知道我最终可以通过 session.user 访问用户,但我希望能够调用 userService.isLoggedIn() ,但我无法轻松地通过视图调用 userService.isLoggedIn() 。那么有没有办法将服务注入到过滤器中,或者我应该创建一个标签库来包装 userService.isLoggedIn() ?


看起来问题是您的 userService 的范围仅限于会话,并且在尝试将服务注入过滤器时不一定存在会话。

如果您的 userService 必须是会话范围的,那么您需要在 spring 配置中使用范围代理。例如。在 grails-app/conf/spring/resources.groovy 中:

import com.your.service.UserService
...
userServiceSession(UserService)
{ bean ->
    bean.scope = 'session'
}
userServiceSessionProxy(org.springframework.aop.scope.ScopedProxyFactoryBean)
{
    targetBeanName = 'userServiceSession'
    proxyTargetClass = true
}

然后在 SecurityFilter 中重命名注入的变量:

def userServiceSessionProxy

(显然,要重命名您在课堂上其他地方使用它的地方)。

这应该做的是在注入时注入代理,但仅在执行过滤器时(当有会话时)转到实际服务。

注意:不确定这样做是否仍然会让其他有会话的地方(例如控制器)仍然将服务引用为“userService”,如果不是,您可能可以在 resources.groovy 中将 userServiceSession 重命名为 userService (并相应地更新 targetBeanName )。

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

我可以将服务注入到 Grails 的过滤器中吗? 的相关文章

  • Grails 3 和 Spring @RequestMapping

    在 Grails 3 中 我尝试使用 spring security oauth 它通过 RequestMapping 提供了一些端点 我可以在 mbean 中看到路径已配置 但任何请求总是会命中 grails 并返回 404 这些请求似乎
  • Grails 2抽象域继承问题

    当在 Grails 中使用抽象 或非抽象 继承时 以下内容对我不起作用 很快 我的继承如下 abstract BaseClass SomeClass extends BaseClass SomeOtherClass extends Base
  • 抛出自定义异常并显示来自自定义 AuthenticationProvider 的错误消息

    这是后续这个问题 https stackoverflow com questions 6412591 hooking into pre authentication with spring security core 我有一个扩展 Abst
  • Grails 弹簧安全/Acegi。自定义用户+密码过期管理

    我正在开发一个 Grails 遗留项目 存在一个名为 User 的域类 它包含密码 用户名 角色等 该项目使用 Spring Security 进行角色管理 我想添加凭据过期 强制用户更新其密码 我修改了 User 类 不是它实现了用户详情
  • 为什么 grails run-app 在编译期间尝试访问远程服务器

    我发现我的 grails 应用程序编译过程中出现了一些错误 Loading Grails 2 0 4 Configuring classpath problems summary ERRORS Server access Error Une
  • 异步作业出错

    我正在尝试创建一个不会阻止请求的异步任务 用户发出请求 任务将启动 控制器将呈现 作业正在运行 这是为了避免请求被阻止等待任务完成 任务完成后 它将执行 onComplete 并对该任务的结果执行某些操作 例如调用将向用户发送邮件的服务 E
  • Grails:当我向 message.properties 添加新属性时出现 Native2ascii 错误

    当我在运行时向 grails 应用程序中的 message properties 文件添加新属性时 出现了一个奇怪的错误 当我通过命令行重新启动应用程序或重新启动STS时 此错误消失 我使用的是 2 0 1 版本 直到一周前 我还能够在运行
  • 运行我的应用程序时,Java 运行时环境检测到致命错误

    我在运行程序时遇到以下错误 并且无法弄清楚解决方案是什么我还查看了具有类似错误的所有主题 但无法解决我的问题 这里的错误 我的应用程序是基于 Groovy 和 Grails 版本 2 0 4 构建的 A fatal error has be
  • 在 Spring MVC 中管理 HTML 资源(CSS、JS 文件)

    是否可以像grails resources那样在Spring MVC中管理HTML资源 与此类似 http www anyware co uk 2005 2011 09 12 optimising your application with
  • Grails 使用来自 POST 请求的 XML 填充参数

    我有一个通过 grails 控制器公开的 RestFull grails api 我需要自动绑定 POST 请求中发送的 xml 数据 我不认为使用groovybindData object params 工作作为params参考似乎没有
  • 使用 html 表收集提交表单中的各种数据

    我有一个 jsp 页面 其中包含一个表 分页并带有顺序列 一个搜索字段和其他基于复选框的过滤器 这样 当我单击按钮时 它会采用表格的分页 表格的顺序 搜索字段中的值以及最终的其他参数 复选框 来执行查询 目前 该表具有分页和使用标签库排序的
  • Grails Log4J 未登录生产环境

    我有一个 Grails 1 3 7 应用程序 并尝试在配置中设置 log4j 以用于生产 log4j 设置在开发中很好 但我无法在生产中显示任何内容 我正在尝试制作一个滚动文件等 但我无法显示任何内容 我什至在 信息 级别进行了配置 这样我
  • 从控制器传递 gsp 参数

    我如何通过不是域类实例的控制器将参数传递到groovy服务器页面 您将参数放入返回给 GSP 的模型对象映射中 例如 def index def hobbies basketball photography render view inde
  • grails 上的同步块在 Windows 上有效,但在 Linux 上无效

    我有一个 grails 应用程序 它依赖于服务中的同步块 当我在 Windows 上运行它时 同步按预期工作 但当我在 ams linux 上运行时 会出现 StaleObjectStateException 该问题在以下示例中重现 cla
  • 构建战争时如何包含额外文件?

    我正在尝试添加一个目录 garils app store 对我的战争就像这样BuildConfig groovy grails war resources stagingDir args gt copy file grails app st
  • Grails 默认包名称

    我是 Grails 的新手 而且非常喜欢它 我想将我的课程放在像这样的包中org company project module model 重复对我来说很痛苦create domain class
  • Grails Asset-pipeline 不加载角度部分模板

    我将 angular ui bootstrap 与 Grails 2 3 x asset pipeline 1 6 1 插件一起使用 其中一个组件 alert js 正在尝试加载 template alert alert html 但这会解
  • grails/mysql 时区更改

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

    我如何基本上对字符串数据类型字段执行唯一约束 class User String username String Email static hasMany roles Roles static constraints Email email
  • Grails + Spring Security:无法登录

    我刚刚开始学习Grails和Spring 我已经按照官方教程创建了一个登录系统 但我无法登录 用户名或密码不匹配 我知道 90 的情况下这是由于双重编码或多个数据源 这也导致双重编码 造成的 但我也没有这样做 class BootStrap

随机推荐

  • Numpy 直方图表示具有相同近似值的浮点数

    我有代码可以在给定范围 0 1 的情况下生成从 10 到 10 的特定值 该代码采用 10 到 10 之间的值 并根据其概率将其附加到列表中 例如 10 将在列表中放入 0 次 因为它对应于值 0 而 10 将在列表中放入 100 次 作为
  • Scrapy:根据下载图像的网址,从下载的图像中创建文件夹结构

    我有一系列定义网站结构的链接 从这些链接下载图像时 我想同时将下载的图像放置在类似于网站结构的文件夹结构中 而不仅仅是重命名它 如中所回答 Scrapy图片下载如何使用自定义文件名 https stackoverflow com quest
  • 是否可以使用 Jenkins 管道进行 Git 合并/推送

    我正在尝试使用 Jenkinsfile 创建 Jenkins 工作流程 我想要它做的就是监视 开发 分支的更改 当发生更改时 我希望它 git tag 并合并到 master 我正在使用 GitSCM Step 但它似乎唯一支持的是 git
  • Flutter Doctor CocoaPods 未安装

    When I run Flutter doctor 我尝试运行 sudo gem install cocoapods 来安装它 但仍然存在同样的问题 请注意 我正在开发通道中使用最新的 flutter 版本运行 xcode 12 有任何想法
  • 将文件添加到 git 的 stage 不执行任何操作并且无法提交

    我陷入了一种奇怪的情况 在我的一个分支中 web config 文件无法添加到舞台上 的输出 git add path to web config git status 与添加文件之前相同 Web config 似乎需要修改 并且尚未添加到
  • 无法传递给 C 代码 - 虚拟环境' aria-label='对象类型 无法传递给 C 代码 - 虚拟环境'> 对象类型 无法传递给 C 代码 - 虚拟环境

    我正在使用 Mac Anaconda 我尝试使用加密货币的 AES 然而 我面临一个奇怪的问题 我只想执行一行简单的代码 obj AES new This is a key123 AES MODE CBC This is an IV456
  • MVC 相当于 ASP.NET 按钮单击事件

    我需要创建一个与 ASP NET 中的按钮单击事件等效的页面 在我的页面上 当用户单击按钮时 我需要处理一些信息 如果发生错误 则显示错误页面 但如果成功 我需要显示成功页面 我是 MVC 的新手 我不知道如何解决这个问题 这就是我到目前为
  • C# 和箭头键

    我是 C 新手 正在现有应用程序中做一些工作 我有一个 DirectX 视口 其中包含我希望能够使用箭头键定位的组件 Currently I am overriding ProcessCmdKey and catching arrow in
  • 需要建议在 Javascript 中应用 .disabled

    我运行 Woocommerce 网站并希望禁用结帐页面上的特定输入 Woocommerce 可以按国家 地区设置运输方式 我将默认国家 地区设置为韩国 并且显示韩国的运输选项 但是 如果我选择美国 运输方式将看到根据美国的运输选项 因此 默
  • 在闪亮的仪表板中从 R 访问 javascript 对象

    SO 有很多闪亮的问题询问如何在 UI 中使用输入值 一般答案是使用updateSelect 家庭或使用renderUI 我知道基本上不可能从输入列表中访问值 input 在 UI 中 因为输入列表仅传递到服务器 因此不存在于 UI 环境中
  • 我可以在 Netlify 中通过 Create-React-App 使用构建环境变量吗?

    如何在 Netlify 中通过 Create React App 使用构建环境变量 You CAN在你的环境变量中使用create react app在 Netlify 上 但 Create React App 的所有构建限制仍然适用 默认
  • Angular 有像 extjs 那样的弹性布局吗?

    ExtJS 有一个非常有用的布局机制 称为 Flex 它的工作原理是将行或列中的所有内容相加 然后使用弹性值除以所有弹性值的总和来分配空间 这会产生如下所示的布局 红框是水平盒布局 块 E 和 F 的给定弹性值之和为 3 因此 E 为屏幕宽
  • sed 中“保持空间”和“模式空间”的概念

    我对 sed 中的两个概念感到困惑 保留空间和模式空间 有人可以帮忙解释一下吗 这是手册的一个片段 h H Copy append pattern space to hold space g G Copy append hold space
  • Python 从同一包中的文件导入 __init__.py 中的类

    我觉得我应该知道这一点 因为我已经用 Python 编程这么久了 但我一直在不断学习关于这种精美语言的新知识 我的问题 很可能是重复的 但我无法找到相同的案例 是这样的 我有这样的文件布局 websocket init py client
  • 带有 QML 的 FbxGeometryLoader

    我想将 fbx 文件导入到我的Scene3D https doc qt io qt 5 11 qml qtdatavisualization scene3d html 通过QMesh https doc qt io qt 5 11 qt3d
  • Linux下与CashCode纸币接受器通信

    我已经实现了 CCNET 协议 以便通过 Linux 上的软件与 CashCode 纸币接受器进行通信 最初 我花了很多时间试图弄清楚为什么设备不响应 我发送的命令 使用反复试验的方法 我找到了为串行端口设置以下选项的解决方案 stty F
  • 我可以在不注销的情况下获得更新的 emailVerified 吗?

    我的注册流程如下 用户填写详细信息并注册 收到发送验证电子邮件 该用户登录后 但看到一个屏幕 要求进行电子邮件验证 用户验证他们的电子邮件并返回应用程序 在这个阶段我怎样才能获得新的用户数据emailVerified字段而不注销用户 我期望
  • Linux:大型 int 数组:mmap 与查找文件?

    假设我有一个数据集 它是存储在 4TB HDD ext4 文件系统上的文件中的 1e12 32 位整数 4 TB 数组 考虑到数据很可能是随机的 或者至少看起来是随机的 pseudo code for long long i 0 i lt
  • ElasticSearch 聚合可以做 SQL 可以做的事情吗?

    在 Elasticsearch 中 我需要获取从最高到最低出现最频繁的颜色的频率和数量 如果我有这样的数据 id name 1 blue 2 blue 3 green 4 yellow 5 blue 6 yellow 7 purple 8
  • 我可以将服务注入到 Grails 的过滤器中吗?

    我有一项服务可以在会话中获取和设置用户 如果有登录用户 我想将一些用户信息传递给每个视图 并认为过滤器是最好的方法 这样我就不必在每个控制器 操作中重复该信息 当我运行该应用程序时 出现以下错误 Error creating bean wi