Spring Security 条件default-target-url

2024-03-07

我注意到有几个关于这个主题的问题。我浏览了它们,但无法将它们应用到我的特定 Spring 设置中。我想根据用户的角色将登录重定向配置为有条件的。这是我到目前为止所拥有的:

<http auto-config="true" use-expressions="true">
        <custom-filter ref="filterSecurityInterceptor" before="FILTER_SECURITY_INTERCEPTOR"/>
        <access-denied-handler ref="accessDeniedHandler"/>
        <form-login
            login-page="/login"
            default-target-url="/admin/index"
            authentication-failure-url="/index?error=true"
            />
        <logout logout-success-url="/index" invalidate-session="true"/>
</http>

我想这个问题 https://stackoverflow.com/questions/3139718/spring-security-changing-spring-security-login-form可能与我想做的事情是同一行。有人知道我该如何应用它吗?

EDIT 1

<bean id="authenticationProcessingFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="authenticationSuccessHandler" ref="authenticationSuccessHandler"/>
</bean>
<bean id="authenticationSuccessHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
    <property name="defaultTargetUrl" value="/login.jsp"/>
</bean>

EDIT 2

目前我没有像这样的课程public class Test implements AuthenticationSuccessHandler {}如图所示这个例子 https://stackoverflow.com/questions/7470405/authenticationsuccesshandler-example-for-spring-security-3/7470476#7470476.


我已经测试了代码并且它可以工作,其中没有火箭科学

public class MySuccessHandler implements AuthenticationSuccessHandler {

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
            HttpServletResponse response, Authentication authentication)
            throws IOException, ServletException {
        Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities());
        if (roles.contains("ROLE_ADMIN")){
            response.sendRedirect("/Admin.html");   
            return;
        }
        response.sendRedirect("/User.html");
    }    
}

安全环境的变化:

<bean id="mySuccessHandler" class="my.domain.MySuccessHandler">
    </bean>

<security:form-login ... authentication-success-handler-ref="mySuccessHandler"/>

update如果你想使用default-target-url方法,它同样可以很好地工作,但会在您的用户首次访问登录页面时触发:

<security:form-login default-target-url="/welcome.htm" />

@Controller
public class WelcomeController {
    @RequestMapping(value = "/welcome.htm")
    protected View welcome() {

        Set<String> roles = AuthorityUtils
                .authorityListToSet(SecurityContextHolder.getContext()
                        .getAuthentication().getAuthorities());
        if (roles.contains("ROLE_ADMIN")) {
            return new RedirectView("Admin.htm");
        }
        return new RedirectView("User.htm");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Security 条件default-target-url 的相关文章

随机推荐

  • JPA GenerationType.AUTO 不考虑具有自动增量的列

    我有一个表 其中有一个简单的 int id 列 在 SQL Server 中具有身份自动增量 实体的 Id 注释为 Id and GeneratedValue Id GeneratedValue strategy GenerationTyp
  • 如何在 django 中安全地存储第三方服务的密码?

    我正在 Django 上运行 Web 服务 用户注册到我的系统并向我提供第三方网络服务的登录详细信息 用户名和密码 我的目的是以最好 最安全的方式存储这些详细信息 不幸的是 我的服务需要这些数据来用于查询第 3 方服务的某些离线脚本 因此我
  • event.stopPropagation() 不起作用 - 捕获仍然传递函数

    首先 我是一个菜鸟 抱歉 如果这个问题足够基本 其次 我尝试搜索 正如我所看到的 我按照其他帖子中的说明应用了解决方案 话虽这么说 我有三组 DIV 每组由 2 个 Div 组成 一个在另一个里面 在 OUTER div 上有一个函数 表示
  • 如何确定是否为 TFS 构建定义执行了 MSBUILD 参数

    我正在使用 Team Foundation Service 2012 带有内部托管的构建控制器 以便我可以将应用程序部署到我们的 Web 服务器 我设置了构建定义 并使用我的调试配置 并提供了以下 MSBUILD 参数 p DeployOn
  • 使用 jQuery 显示/隐藏表格列

    我有一个有五列的表格 column1 column2 column3 column4 column5 当选中第一个复选框时 我有一些复选框 每个复选框对应一列 然后我需要显示第一列 如果未选中我需要隐藏第一列 像那样 我需要对所有列进行操作
  • 我可以将 git 上的分叉项目更新为原始/主副本吗?

    几周前 我在 GitHub 上分叉了一个公共项目 今天 我想尝试一些东西 但我想确保我使用的副本是最新的 我可以先更新我的前叉吗 如果在我开始更改后对叉子进行更改 会发生什么情况 我可以再次更新我的分叉 同时将我的更改保留在那里 即合并 如
  • 如何让 grunt 服务任务与 watch 一起工作?

    我最近安装并启动并运行了它 但我似乎无法让它与我的手表任务同时运行 在我的 grunt 文件中 如果在监视之前注册服务任务 服务器会旋转 但监视任务不会 反之亦然 这是服务包 我正在使用并附加了 Grunt 文件 https www npm
  • 如何在 Dart / Flutter 中使用另一个文件的功能?

    我有一个 Flutter 应用程序 正在使用 flutter web view 包 我在几个不同的文件上使用它 并且希望创建自己的文件 并在我的应用程序中的任何位置简单地引用 launchwebview 函数 因为需要几行代码才能使其工作
  • 负载下 .Net Core 容器的 SQL Server DbCommand 超时

    我正在 Open Shift Enterprise V3 上运行一个指向 SQL Server 数据库的 Net Core 容器 我有一个 Net Core REST API 带有 put 方法 可以在数据库中添加或更新记录 我添加 更新的
  • MATLAB - 从分类器生成混淆矩阵

    我有一些测试数据和标签 testZ 0 25 0 29 0 62 0 27 0 82 1 18 0 93 0 54 0 78 0 31 1 11 1 08 1 02 testY 1 1 1 1 1 2 2 2 2 2 2 2 2 然后我对它
  • 删除 pyspark 中所有列名称中的空格

    我是 pySpark 的新手 我收到了一个大约有 1000 列的 csv 文件 我正在使用数据块 大多数这些列之间都有空格 例如 总收入 总年龄 等 我需要更新所有带有下划线 空格的列名称 我已经尝试过这个 foreach DataColu
  • 根据另一个数据帧替换数据帧中的值

    我有以下两个数据框 gt df1 lt data frame A c 0 0 0 B c 0 201 0 C c 0 467 0 A B C 1 0 0 1 2 0 201 467 3 0 0 0 gt df2 lt data frame
  • 如何在R中设置plotly图表具有透明背景?

    到目前为止 这是我所拥有的 f1 lt list family Arial sans serif size 25 color white f2 lt list family Old Standard TT serif size 14 col
  • Mysql:检查范围时间冲突[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有下表 其中存储了教师的课堂例程
  • 使用正则表达式过滤并返回匹配的数字

    在这里 我尝试使用正则表达式从文本中过滤特定的电话号码 电话名称可能有这样的漏洞 4023one345233应被视为40231345233然后应该过滤 这段代码运行良好 没有漏洞 code1 arrwords array 0 gt zero
  • 如何安全地存储 Android KeyStore 密码

    在一个应用程序中 我使用 Android KeyStore 我已经为整个密钥库和每个密码条目设置了一个密码 由于这些密码是字符串 因此它们存储在代码中的字符串成员中 显然 如果我想发布应用程序 这是不安全的 因为潜在的攻击者可以反编译 ap
  • 按降序按组连接值[重复]

    这个问题在这里已经有答案了 我想要一个数据 我的数据 A 看起来像 author id paper id prob 731 24943 1 731 24943 1 731 688974 1 731 964345 8 731 1201905
  • 如何根据 C11 使用二进制前缀?

    我目前正在开始使用微控制器编程C30 A C编译器基于GCC从微芯片为他们PIC24设备 并且我启用了Strict ANSI warnings出于好奇 首先 我不知道在 C11 中 像 这样的注释标记是 错误的 而我应该使用 blah bl
  • 是否可以访问 ViewPager 正在查看的当前 Fragment?

    我有一个应用程序ViewPager和三个Fragments 我想弄清楚如何获得当前Fragment被查看 以便我能够了解其论点 我有一个OnPageChangeListener获取当前页面索引 但是 ViewPager getChildAt
  • Spring Security 条件default-target-url

    我注意到有几个关于这个主题的问题 我浏览了它们 但无法将它们应用到我的特定 Spring 设置中 我想根据用户的角色将登录重定向配置为有条件的 这是我到目前为止所拥有的