Spring Security(Java Config)登录 - 根据用户角色返回不同的URL

时间:2015-04-25 10:25:34

标签: java spring login spring-security spring-java-config

当用户根据角色登录系统时,我想返回不同的页面。

我有这种登录方法,但我不知道如何返回不同的URL。

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
           .antMatchers("/css/**", "/js/**", "/images/**", "/data/**",  "/", "/home").permitAll()

        .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
            .permitAll();
}

我怎么能这样做?如果你没有在登录后添加一个重定向的新控制器,并且这个重定向到基于他的角色的不同网址,这是可能的吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以在.formLogin().logout功能上使用defaultSuccessUrlfailureUrl。这是一个例子:

.formLogin()
    .loginPage("/login").loginProcessingUrl("/login/validate")
    .defaultSuccessUrl("/").failureUrl("/login?error=true")
    .usernameParameter("username").passwordParameter("password")
    .and()
.logout()
    .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
    .logoutSuccessUrl("/login?logout=true")

就每个用户角色的重定向而言,我建议defaultSuccessUrl页面根据用户的角色进行重定向:

<sec:authorize access="hasRole('ROLE_ADMIN')">"
    <c:redirect url="/admin.html"/>
</sec:authorize>
<sec:authorize access="hasRole('ROLE_USER')">"
    <c:redirect url="/user.html"/>
</sec:authorize>