用户登录根据角色跳转至不同页面

用户登录根据角色跳转至不同页面


最近做的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 获取当前用户信息及权限

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值