D4N*_*3LS 2 java spring spring-mvc spring-security
我正在尝试使用Spring Security,所有人都使用一个角色.
我想根据ROLE重定向到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();
}
}
Run Code Online (Sandbox Code Playgroud)
执行此操作的最佳方法是将用户发送到URL,然后创建一个处理default-target-url的控制器.例如,以下内容将用户发送到/ default:
http
.formLogin()
.defaultSuccessUrl("/default")
Run Code Online (Sandbox Code Playgroud)
现在创建一个处理URL"/ default"的控制器.控制器应根据滚动重定向或转发.下面是使用Spring MVC的示例,但任何类型的控制器都可以工作(即Struts,Servlet等).
@Controller
public class DefaultController {
@RequestMapping("/default")
public String defaultAfterLogin(HttpServletRequest request) {
if (request.isUserInRole("ROLE_ADMIN")) {
return "redirect:/admin/";
}
return "redirect:/user/";
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法的优点是它没有与任何特定的Security实现相结合,它没有耦合到任何特定的MVC实现,并且它可以轻松地与XML和Java配置方法一起使用.
一些额外的说明:
以下是您的代码的清理版本:
@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();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3609 次 |
最近记录: |