Symfony2扩展DefaultAuthenticationSuccessHandler时保持行为

Symfony2扩展DefaultAuthenticationSuccessHandler时保持行为,authentication,symfony,Authentication,Symfony,我希望能够通过常用的登录表单登录我的应用程序,并使用AJAX将用户/密码直接发送到login\u check路径 这个想法是当用户通过AJAX访问时返回Response,代码为200或400,这取决于登录成功与否 查看其他线程,我最终决定扩展默认处理程序DefaultAuthenticationSuccessHandler和DefaultAuthenticationFailureHandler要实现这一点,请导出为服务,并在我的安全区域的success\u handler属性中指定 文件服务.y

我希望能够通过常用的登录表单登录我的应用程序,并使用AJAX将用户/密码直接发送到
login\u check
路径

这个想法是当用户通过AJAX访问时返回
Response
,代码为200或400,这取决于登录成功与否

查看其他线程,我最终决定扩展默认处理程序
DefaultAuthenticationSuccessHandler
DefaultAuthenticationFailureHandler
要实现这一点,请导出为服务,并在我的安全区域的
success\u handler
属性中指定

文件服务.yml

服务: authentication.success\u处理程序: 类:%mycustom.authentication.success\u处理程序。类% 参数:['@security.http_utils',{}] 公众:错 标签: -{name:'monolog.logger',频道:'security'}

authentication.failure_handler:
    class: %mycustom.authentication.failure_handler.class%
    arguments: ['@http_kernel', '@security.http_utils', {}, '@logger' ]
    public: false
    tags:
        - { name: 'monolog.logger', channel: 'security' }
File security.yml

    secured_meems_area:
        pattern:    ^/somrurl/
        form_login:
            login_path: /somrurl/login
            check_path: /somrurl/api/login_check
            success_handler: authentication.success_handler
            failure_handler: authentication.failure_handler
            require_previous_session: false
    secured_meems_area:
        pattern:    ^/somrurl/
        form_login:
            login_path: /somrurl/login
            check_path: /somrurl/api/login_check
            #
            # DON'T USE !!!
            #
            # success_handler: authentication.success_handler
            # failure_handler: authentication.failure_handler
            #
            require_previous_session: false
所有这些似乎都起作用了,只是我的extendend处理程序的行为与原来的不一样。在Symfony使用的默认实现中,如果您访问
页面/a
,但未登录,Symfony将重定向到登录页面,然后再次重定向到
页面/a
。但这不会发生在我的扩展处理程序中

为了解决这个问题,我可以在将处理程序注册为服务时指定一个
default\u target\u path
,但我想了解它为什么不遵循“正常”行为

有什么想法吗

提前谢谢

解决方案 经过查找和测试,我在这里找到了一个解决方案

其思想是覆盖默认的symfony成功/失败处理程序,而不是在security.yml文件中定义我自己的并应用

File security.yml

    secured_meems_area:
        pattern:    ^/somrurl/
        form_login:
            login_path: /somrurl/login
            check_path: /somrurl/api/login_check
            success_handler: authentication.success_handler
            failure_handler: authentication.failure_handler
            require_previous_session: false
    secured_meems_area:
        pattern:    ^/somrurl/
        form_login:
            login_path: /somrurl/login
            check_path: /somrurl/api/login_check
            #
            # DON'T USE !!!
            #
            # success_handler: authentication.success_handler
            # failure_handler: authentication.failure_handler
            #
            require_previous_session: false
文件服务.yml。(注意服务名称中的安全性。

这样,我们就可以用自己的实现覆盖默认实现,而不需要在安全区域中指定处理程序