gpt4 book ai didi

java - SecurityConfig 2 不同角色的成功 url

转载 作者:行者123 更新时间:2023-12-03 00:21:54 25 4
gpt4 key购买 nike

我正在尝试使用 Spring Security,所有这些都使用一个角色。

我想根据角色重定向到2个不同的站点,但框架始终重定向到最后一个defaultSuccessUrl("/...")**。这可能吗?

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN")
.and().withUser("user").password("user").roles("USER");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/admin/**")
.access("hasRole('ROLE_ADMIN')").and().formLogin()
.defaultSuccessUrl("/admin**").loginPage("/")
.failureUrl("/").usernameParameter("username")
.passwordParameter("password").and().logout()
.logoutSuccessUrl("/").and()
.authorizeRequests().antMatchers("/user/**")
.access("hasRole('ROLE_USER')").and().formLogin()
.defaultSuccessUrl("/user**").loginPage("/")
.failureUrl("/").usernameParameter("username")
.passwordParameter("password").and().logout()
.logoutSuccessUrl("/");
http.csrf().disable();
}
}

最佳答案

执行此操作的最佳方法是将用户发送到 URL,然后创建一个处理 default-target-url 的 Controller 。例如,以下命令会将用户发送到/default:

http
.formLogin()
.defaultSuccessUrl("/default")

现在创建一个处理 URL“/default”的 Controller 。 Controller 应根据滚动重定向或转发。下面是使用 Spring MVC 的示例,但任何类型的 Controller 都可以工作(即 Struts、Servlet 等)。

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

这种方法的优点是它不耦合到任何特定的安全性实现,不耦合到任何特定的 MVC 实现,并且它可以轻松地与 XML 和 Java 配置方法配合使用。

一些附加说明:

  • “/admin**”是 defaultSuccessUrl 重定向到的无效 URL
  • 考虑提高 Java 配置可读性 formatting your code
  • 由于默认设置,您有不必要的配置。

下面是代码的清理版本:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
throws Exception {
auth
.inMemoryAuthentication()
.withUser("admin")
.password("admin")
.roles("ADMIN")
.and()
.withUser("user")
.password("user")
.roles("USER");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.and()
.formLogin()
.defaultSuccessUrl("/default")
.loginPage("/")
.failureUrl("/")
.and()
.logout()
.logoutSuccessUrl("/")
.and()
// It is generally BAD to disable CSRF protection!
.csrf().disable();
}
}

关于java - SecurityConfig 2 不同角色的成功 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31524426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com