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

Posted

技术标签:

【中文标题】Spring Security(Java Config)登录 - 根据用户角色返回不同的 URL【英文标题】:Spring Security (Java Config) Login - Return Different URL Based on User Role 【发布时间】:2015-07-04 00:44:45 【问题描述】:

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

我有这个方法可以登录,但是不知道怎么返回不同的网址。

@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();

我该怎么做?如果您不添加一个新的控制器,在登录后重定向并且此重定向到他的基本角色中的不同 url,有可能吗?

非常感谢!

【问题讨论】:

我不明白你的意思是什么:“......由他的角色” - 但也许这会有所帮助。 ***.com/a/14577220/280244 @Ralph 是具有角色用户的登录用户,如果使用角色管理员登录管理员,则具有不同的页面。当用户登录重定向页面或其他时,我需要提供不同的 url 【参考方案1】:

您可以在.formLogin().logout 函数上使用defaultSuccessUrl 和failureUrl。这是一个例子:

.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>

【讨论】:

这正是我需要的,太好了。但是有一个问题,我用java中的所有东西和注解,能不能把url的一部分变成一个函数的作用?我重写方法?我“复制”了这个***.com/questions/7470405/…;但是我没有xml,如何在java注释中制作?

以上是关于Spring Security(Java Config)登录 - 根据用户角色返回不同的 URL的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security Java Config Preview--官方

如何在 Spring Boot 中使用 Spring Security 配置 CORS? [复制]

java.security.Principal - 在 HttpServletRequest 和 Spring Security 中创建

Spring- Security :java.lang.NoClassDefFoundError: org/springframework/security/context/DelegatingApp

spring security 登陆报错java.lang.StackOverflowError: null?

Spring Security 和 Websocket 的 CORS 问题