如果安全拒绝某个角色的访问,则在 Symfony3 中触发一个 Jquery 函数

Posted

技术标签:

【中文标题】如果安全拒绝某个角色的访问,则在 Symfony3 中触发一个 Jquery 函数【英文标题】:if Security denies access for a Certain Role , Trigger a Jquery Function in Symfony3 【发布时间】:2018-01-30 10:11:17 【问题描述】:

如果安全拒绝ROLE_USER 使用路径Admin_Only 访问,我想触发某个通知弹出窗口,我成功配置了这个,它在我的:

security.yml

 access_control:
    -  path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY 
    -  path: ^/Admin_Only, role: ROLE_ADMIN 

access_denied_url: /home

我的 Twig 文件上有一个 JQuery 函数,我将/home 动作渲染到该文件中,我们称之为accessDeniedJQ。 问题是我如何检查重定向发生和访问被拒绝以及在哪里(控制器或树枝上的操作)发生了重定向,换句话说,我如何检查是否引发了此异常以便 JQ 函数启动。

【问题讨论】:

您是否在应用程序的不同点尝试过console.log()?在php中,我相信你可以做一个<?php echo "<script>console.log('')</script>" ?>作为你的死。 在原生 php 中我知道这是可能的,但是使用 twig 模板我缺乏捕获异常的语法,一个代码示例会很有帮助 你不能把 url 改成 /home?redirected=true 并直接在你的 jQuery 中查找吗? @KhaledOuertani try catch 怎么样? ***.com/questions/23731604/… @Salketer 非常感谢,我确实传递了一些参数以及路径,我在树枝上检查了它们,根据它的存在我能够触发该功能,请用一些代码示例详细说明所以这个问题有一个正确的答案。 【参考方案1】:

当您的框架执行内部重定向(或者您只是不知道是否存在 HTTP 重定向)时,您最好的办法是使用带有查询字符串的 URL 来让您的代码知道它。

这里我的建议是在 url 中添加类似于 redirected=true 的内容,这样它就会变成 /home?redirected=true

使用jquery get querystring from URL答案中的函数

function getUrlVars()

    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    
    return vars;

我可以轻松检测到我的页面被重定向并采取相应措施:

if(getUrlVars().redirected)
    alert('You are not allowed there, got redirected!');

【讨论】:

以上是关于如果安全拒绝某个角色的访问,则在 Symfony3 中触发一个 Jquery 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使弹簧安全重定向

window7拒绝连接MongoDB怎么办?

如何限制用户仅通过HTTPS方式访问OSS?

配置安全性以通过 WS 访问 EJB -- WFLYEJB0364 连接被拒绝

WEB安全性测试之拒绝服务攻击

Spring 安全性与给定角色不匹配