Symfony2:如何将Authentication Listener配置值转换为其他服务?

Bri*_*ian 5 cas single-sign-on symfony

我正在为Symfony 2创建一个身份验证提供程序,允许用户使用名为CAS的单点登录协议进行身份验证.

我的身份验证侦听器AbstractAuthenticationListener扩展.其中一个配置参数是check_path,它是触发身份验证侦听器对请求进行身份验证的路径/路由.

我需要check_path在构建CAS服务器的URL时(因此CAS服务器知道将用户返回到哪里),这很容易,因为我的自定义入口点类在我的安全工厂中构建时传递了配置数组.

困难的部分是我还需要check_path在侦听器之外,就像在Authentication Provider类中进行身份验证时一样.我需要它,因为当CAS服务器将用户发送回应用程序时,它会传递必须经过验证的"票证"参数.为了验证它,我向CAS服务器发送一个curl请求,该服务器必须包含票证以及check_path使用的原始票据.

正如写的那样,我意识到当我进入身份验证提供程序时,我可以获取页面请求的当前URL(因为check_path它无论如何都会触发它),但这似乎是关闭的,我宁愿直接获取配置值重新构建服务URL.当我想在check_path其他地方使用它时,它也没有帮助,比如在构建CAS服务器的注销URL时也需要check_path.

编辑:createAuthProvider方法AbstractFactory是通过双方的配置和容器,但我不能改变我的任何服务,在这里,因为他们还没有容器的一部分.也许如果我有办法在加载服务后添加编译器传递并以某种方式访问​​侦听器配置?

小智 0

您可以将 check_path 作为参数传递给您的侦听器吗?

如果它在您的配置或参数文件中定义,您可以将其传递给您的侦听器,如下所示:

your_authentication_listener:
    class: YourBundle\Listener\AuthenticationListener
    arguments: ['%check_path%']
    tags:
        ...
Run Code Online (Sandbox Code Playgroud)

(如果我理解正确的话。)