根据spring security 3.1中的角色确定目标URL

Mit*_*ani 10 spring spring-security spring-3

在spring security 3.0中,我们正在使用AuthenticationProcessingFilter类,我们使用的determineTargetUrl()方法是根据不同的角色返回url.

现在,我们正在转向spring security 3.1.0.RC3,我现在应该如何确定基于不同角色的url,因为AuthenticationProcessingFilter类已从新版本中删除.任何人都可以请给我一些简短的代码,以便我可以实现自定义过滤器重定向到不同角色的不同页面.

Rob*_*nch 22

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

<http>
    ... 
    <form-login login-page="/login" default-target-url="/default"/>
</http>
Run Code Online (Sandbox Code Playgroud)

然后创建一个处理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";
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法的优点是它没有与任何特定的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"/>
Run Code Online (Sandbox Code Playgroud)

我不建议这样做,因为它与Spring Security API绑定,最好在可能的情况下避免这种情况.