当前位置: 首页 > 面试题库 >

根据Spring Security 3.1中的角色确定目标URL

昝晗昱
2023-03-14
问题内容

在Spring Security 3.0中,我们拥有AuthenticationProcessingFilter使用determineTargetUrl()方法的类,该方法根据不同的角色返回url。

现在,我们将转向Spring Security 3.1.0.RC3,AuthenticationProcessingFilter由于从新版本中删除了类,因此我现在应该如何根据不同的角色确定url 。任何人都可以通过一些代码简要地介绍我的步骤,以便我可以实现自定义过滤器以重定向到不同角色的不同页面。


问题答案:

根据角色确定目标URL的最佳方法是在Spring Security配置中指定目标URL,如下所示。这将在Spring 3.0或3.1中运行

<http>
    ... 
    <form-login login-page="/login" default-target-url="/default"/>
</http>

然后创建一个处理default-target-url的控制器。控制器应根据侧滚进行重定向或转发。下面是使用Spring MVC的示例,但是任何类型的控制器都可以使用(例如Struts,Servlet等)。

@Controller
public class DefaultController {
    @RequestMapping("/default")
    public String defaultAfterLogin(HttpServletRequest request) {
        if (request.isUserInRole("ROLE_ADMIN")) {
            return "redirect:/users/sessions";
        }
        return "redirect:/messages/inbox";
    }
}

这种方法的优点是它不与任何特定的Security实现耦合,不与任何特定的MVC实现耦合,并且可以与Spring Security命名空间配置一起轻松使用。完整的示例可以在我今年在SpringOne上提出的SecureMail项目中找到。

另一种选择是你可以创建一个自定义AuthenticationSuccessHandler。该实现可能扩展SavedRequestAwareAuthenticationSuccessHandler,它是默认的AuthenticationSuccessHandler。然后可以使用命名空间将其连接,如下所示。

<sec:http>
    <sec:form-login authentication-success-handler-ref="authSuccessHandler"/>
</sec:http>
<bean:bean class="example.MyCustomAuthenticationSuccessHandler"/>

我不建议这样做,因为它与Spring Security API有关,最好在可能的情况下避免这样做。



 类似资料:
  • 环境之间的唯一区别(从Ansible的角度来看)是。/roles/esb/vars/main.yml中保存的信息。 我已经考虑过使用svn为每个环境保留一个vars/main.yml,所以每次需要配置环境时,在运行上面的命令之前,我会检查该环境的角色,然后检查vars/main.yml。 对我来说,不是一个优雅的解决方案。我怎样才能做得更好? ./roles/esb/tasks/main.yml

  • 登录帧 菜单框架

  • 根据坐标系,如果只给定矩形的中心坐标以及宽度和高度,您将如何确定矩形的左上角坐标? 例如,矩形的中心坐标是(40,40),矩形的宽度为90,高度为60。

  • 问题内容: 我正在学习在我的项目中使用的 Spring Framework 。我在 web.xml 文件中找到了 ContextLoaderListener 条目。但是无法弄清楚它对开发人员有何帮助? __ 在 ContextLoaderListener 的官方文档中,它表示要启动 WebApplicationContext 。关于 WebApplicationContext JavaDocs说:

  • 我正在学习在我的项目中使用的Spring框架。我在web.xml文件中找到了ContextLoaderListener条目。但不能确定它对开发人员有何帮助? 在ContextLoaderListener的正式文档中,它表示要启动WebApplicationContext。关于WebApplicationContext JavaDocs,请说明: 接口为web应用程序提供配置。 但我不能理解Cont

  • 问题内容: 我有一种情况,我想在Jenkins参数化的版本中更改选择参数的内容。 就我而言,我想要一个用于部署应用程序“ Deploy My App”的项目。在构建该项目时,将为用户提供一个选择参数。我想根据用户角色更改此列表的内容。例如,具有“ dev_deploy”角色的人将能够看到开发环境,而具有“ test_deploy”角色的人将能够看到测试环境等。 我当前正在使用可扩展选择参数插件和基