关于SpringSecurity配置403权限访问页面的完整代码

 更新时间:2021年06月19日 14:47:34   作者:别团等shy哥发育  
本文给大家分享SpringSecurity配置403权限访问页面的完整代码,配置之前和配置之后的详细介绍,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

1、未配置之前

在这里插入图片描述

2、开始配置

 2.1 新建一个unauth.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>没有访问的权限</h1>
</body>
</html>

2.2 在继承WebSecurityConfigurerAdapter的配置类中设置

关键代码:

//配置没有权限访问自定义跳转的页面
  http.exceptionHandling()
  .accessDeniedPage("/unauth.html");

配置类完整代码:

package com.atguigu.springsecuritydemo1.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class SecurityConfigTest extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(password());
    }

    @Bean
    PasswordEncoder password(){
       return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //退出配置
        http.logout().logoutUrl("/logout")
                .logoutSuccessUrl("/test/hello")
                .permitAll();

        //配置没有权限访问自定义跳转的页面
        http.exceptionHandling().accessDeniedPage("/unauth.html");
        http.formLogin()             //自定义自己编写的登陆页面
            .loginPage("/login.html")    //登录页面设置
            .loginProcessingUrl("/user/login") //登录访问路径
            .defaultSuccessUrl("/success.html").permitAll()    //登录成功之后,跳转路径
            .and().authorizeRequests()
               //设置哪些路径可以直接访问,不需要认证
                .antMatchers("/","/test/hello","/user/login").permitAll()
                //当前登录的用户,只有具有admins权限才可以访问这个路径
               //1、hasAuthority方法
               //.antMatchers("/test/index").hasAuthority("admins")
               //2、hasAnyAuthority方法
              // .antMatchers("/test/index").hasAnyAuthority("admins,manager")
              //3、hasRole方法  ROLE_sale
               .antMatchers("/test/index").hasRole("sale")
                //4、hasAnyRole方法

            .anyRequest().authenticated()
            .and().csrf().disable();    //关闭csrf防护
    }
}

2.3 继承UserDetailsService接口的实现类

package com.atguigu.springsecuritydemo1.service;

import com.atguigu.springsecuritydemo1.entity.Users;
import com.atguigu.springsecuritydemo1.mapper.UsersMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("userDetailsService")
public class MyUserDetailService implements UserDetailsService {

    @Autowired
    private UsersMapper usersMapper;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        //调用userMapper中的方法,根据用户名查询数据库
        QueryWrapper<Users> wrapper=new QueryWrapper<>();//条件构造器
        //where username=?
        wrapper.eq("username",username);
        Users users= usersMapper.selectOne(wrapper);
        //判断
        if(users==null){    //数据库没有用户名,认证失败
            throw new UsernameNotFoundException("用户名不存在!");
        }

        List<GrantedAuthority> auths= AuthorityUtils.commaSeparatedStringToAuthorityList("admins,ROLE_sale");
        //从查询数据库返回user对象,得到用户名和密码,返回
        return new User(users.getUsername(),new BCryptPasswordEncoder().encode(users.getPassword()),auths);
    }

}

3、测试

现在我故意将原先的sale改为sale1制造错误

在这里插入图片描述

启动项目并访问http://localhost:8111/test/index

在这里插入图片描述

输入lucy 123

在这里插入图片描述

成功实现

以上就是SpringSecurity配置403权限访问页面的详细内容,更多关于SpringSecurity权限访问页面的资料请关注脚本之家其它相关文章!

相关文章

  • IntelliJ IDEA连接MySQL数据库详细图解

    IntelliJ IDEA连接MySQL数据库详细图解

    今天小编就为大家分享一篇关于intellij idea连接mysql数据库详细图解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 详解Hibernate缓存与性能优化

    详解Hibernate缓存与性能优化

    在hibernate中,提到性能优化,很自然地我们就想到了缓存。缓存是什么,都有哪些呢?下面这篇文章就主要给大家介绍了关于Hibernate缓存与性能优化的相关资料,需要的朋友可以参考下。
    2017-02-02
  • Java中嵌入式MySQL的使用方法

    Java中嵌入式MySQL的使用方法

    这篇文章主要为大家详细介绍了Java中嵌入式MySQL的使用方法,Java中如何使用嵌入MySQL,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • 15个高级Java多线程面试题及回答

    15个高级Java多线程面试题及回答

    这篇文章主要介绍了15个高级Java多线程面试题及回答,翻译自国外的一篇文章,这些面试题容易混淆、较难回答,需要的朋友可以参考下吧
    2014-05-05
  • java数据结构之栈的详解

    java数据结构之栈的详解

    这篇文章主要为大家详细介绍了Java数据结构的栈的应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-08-08
  • Java中匿名类的两种实现方式

    Java中匿名类的两种实现方式

    本文主要介绍了Java中匿名类的两种实现方式。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • spring boot hutool整合email的详细过程

    spring boot hutool整合email的详细过程

    这篇文章主要介绍了spring boot hutool整合email的相关知识,本文介绍两种方式发送email文件,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • java实现汉字转拼音

    java实现汉字转拼音

    这篇文章主要介绍了java实现汉字转拼音的功能,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 什么是Java布隆过滤器?如何使用你知道吗

    什么是Java布隆过滤器?如何使用你知道吗

    这篇文章主要为大家详细介绍了Java布隆过滤器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 详细谈谈Spring事务是如何管理的

    详细谈谈Spring事务是如何管理的

    在使用传统的事务编程策略时,程序代码必然和具体的事务操作代码耦合,而使用Spring事务管理策略恰好可以避免这种尴尬,Spring的事务管理提供了两种方式:编程式事务管理和声明式事务管理,这篇文章主要给大家介绍了关于Spring事务是如何管理的相关资料,需要的朋友可以参考下
    2021-09-09

最新评论