用户登录根据角色跳转至不同页面
最近做的spring boot项目中,需要根据权限使用户登录后进入不同的页面
比如拥有管理员权限的用户直接进入管理界面,而普通用户直接进入主页
目前的状况是这样的
不管是什么用户在使用 post请求/login 方法之后,便会实现登录功能,但是却无法根据用户所拥有权限进行判断
当前的SecurityConfig.java
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception{
httpSecurity.authorizeRequests()
//都可以访问
.antMatchers("/css/**","/js/**","/fonts/**","/assets/**",
"/fragments/**","/img/**","/index").permitAll()
//需要相应角色才能访问
.antMatchers("/admins/**").hasRole("ADMIN")
.and()
//基于 Form 表单的登录验证
.formLogin()
// 自定义登录界面以及登录失败后的页面
.loginPage("/login").failureUrl("/login-error")
// 启用remember_me
.and().rememberMe().key(KEY)
//处理异常,拒绝访问就重定向到403页面
.and().exceptionHandling().accessDeniedPage("/403");
//禁用 H2 控制台的CSRF 防护
httpSecurity.csrf().ignoringAntMatchers("/h2-console/**");
// 允许来自同一来源的H2 控制台的请求
httpSecurity.headers().frameOptions().sameOrigin();
}
因为目前在实现登录验证成功后,便会直接跳转至index页面
,所以没有办法进行验证
解决办法:
在完成登录验证成功之后,我们让其转入"/login-allot",在此方法内进行判断和进一步跳转
关键代码
:
.loginPage("/login").defaultSuccessUrl("/login-allot")
更改之后:
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception{
httpSecurity.authorizeRequests()
//都可以访问
.antMatchers("/css/**","/js/**","/fonts/**","/assets/**",
"/fragments/**","/img/**","/index").permitAll()
//需要相应角色才能访问
.antMatchers("/admins/**").hasRole("ADMIN")
.and()
//基于 Form 表单的登录验证
.formLogin()
// 自定义登录界面
.loginPage("/login").defaultSuccessUrl("/login-allot").failureUrl("/login-error")
// 启用remember_me
.and().rememberMe().key(KEY)
//处理异常,拒绝访问就重定向到403页面
.and().exceptionHandling().accessDeniedPage("/403");
//禁用 H2 控制台的CSRF 防护
httpSecurity.csrf().ignoringAntMatchers("/h2-console/**");
// 允许来自同一来源的H2 控制台的请求
httpSecurity.headers().frameOptions().sameOrigin();
}
/**
* 用于判断登录用户权限
* 并根据权限进行页面跳转
* @return
*/
@GetMapping("/login-allot")
public String loginAllot(){
//获取当亲用户权限并转换成字符串
String authorities = userService.getUserAuthorities().toString();
//如果是超级管理员账户 跳转至管理员界面
if(authorities.contains(ROLE_ADMIN)){
return "admins/admin";
}
//如果是 普通账户 跳转至 主界面
else if (authorities.contains(ROLE_USER)){
return "index";
}
return "index";
}
权限及用户信息获取方法请参考我的另一篇博文:
spring security 获取当前用户信息及权限