security 概念

九鹤 等级 300 0 0

security

创建核心配置文件
@EnableWebSecurity
public class SeurityConfig extends WebSecurityConfigurerAdapter{}
改写方法
    /**
     * 认证
     * 在内存中创建了一个用户
     *
     * @param auth
     * @throws Exception
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("name")
                .password(passwordEncoder.encode("123"))
                .roles("ADMIN");//添加角色
    }
添加密码加密器
 /**
     * 给容器加一个密码加密器
     *
     * @return
     */
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
密码加密
  /**
     * 对一同个字符串进行加密三次 三次得出的结果是不一样的
     * 只要是用同一个加密器加密的 解密也是一样的
     * @param args
     */
    public static void main(String[] args) {
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();

        //加密
        System.out.println(bCryptPasswordEncoder.encode("123"));
        System.out.println(bCryptPasswordEncoder.encode("123"));
        System.out.println(bCryptPasswordEncoder.encode("123"));


        //解密
        bCryptPasswordEncoder.matches("123","$2a$10$rvN6duVInXYxtuoI.eH53uSOSpgb/mkLVOUQCEfHidHoUnZjxbAf6"));
    }

获取当前用户的信息

/**
     * 获取当前用户
     *
     * @param principal
     * @return
     */
    @GetMapping("getUserInfo")
    private String getUserInfo(Principal principal) {
        System.out.println(principal);
        return "";
    }

     /**
     * 获取当前用户
     * <p>
     * 当用户登录完之后 会把用户的消息 放到
     * SecurityContextHolder  基于session方式的认证
     *
     * @return
     */
    @GetMapping("getUserInfo2")
    private Authentication getUserInfo2() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        return authentication;
    }

登录失败的处理器

 /**
     * 登录失败的处理器
     *
     * @return
     */
    @Bean
    public AuthenticationFailureHandler authenticationFailureHandler() {
        return (rquset, response, exception) -> {
            response.setContentType("application/json;charset=utf-8");
            PrintWriter pw = response.getWriter();
            HashMap<String, Object> map = new HashMap<>(4);
            map.put("code", 401);
            if (exception instanceof LockedException) {
                map.put("msg", "账户被锁定,登陆失败!");
            } else if (exception instanceof BadCredentialsException) {
                map.put("msg", "账户或者密码错误,登陆失败!");
            } else if (exception instanceof DisabledException) {
                map.put("msg", "账户被禁用,登陆失败!");
            } else if (exception instanceof AccountExpiredException) {
                map.put("msg", "账户已过期,登陆失败!");
            } else if (exception instanceof CredentialsExpiredException) {
                map.put("msg", "密码已过期,登陆失败!");
            } else {
                map.put("msg", "登陆失败!");
            }
            pw.write(new ObjectMapper().writeValueAsString(map));
            pw.flush();
            pw.close();
        };
    }

访问接口被拒绝的处理器

    /**
     * 请求被拒绝的处理器
     *
     * @return
     */
    @Bean
    public AccessDeniedHandler accessDeniedHandler() {
        return (request, response, accessDeniedException) -> {
            response.setContentType("application/json;charset=utf-8");
            HashMap<String, Object> map = new HashMap<>(4);
            map.put("code", 403);
            map.put("msg", "你没有权限");
            PrintWriter pw = response.getWriter();
            pw.write(new ObjectMapper().writeValueAsString(map));
            pw.flush();
            pw.close();
        };
    }
收藏
评论区

相关推荐

1 Java内存区域与内存溢出异常
1 java虚拟机对内存的管理 java虚拟机在执行java程序的时候把内存分为若干个不同的区,这些区各自有不同的用处,以及创建和销毁时间. 有的区随着虚拟机的启动而启动,有的区则依赖用户线程的启动和结束而启动和结束. 根据java虚拟机规范,java虚拟机将内存分为下面几个部分:如下图 image(https://imghelloworld.o
.NET C#到Java没那么难,MVC篇
.NET C到Java没那么难,MVC篇 .NET C到Java没那么难,MVC篇 最典型的JAVA MVC就是JSP servlet javabean的模式。比较好的MVC,老牌的有Struts、
.NET C#到Java没那么难,Servlet篇
.NET C到Java没那么难,Servlet篇 .NET C到Java没那么难,Servlet篇 前言 .NET C到Java没那么难,都是面向对象的语言,而且语法还是相似的,先对比一下开发
Linux下安装jdk
一 、安装前 java 1.查看是否已安装JDK yum list installed |grep java 2.卸载CentOS系统Java环境 yum y remove java1.8.0openjdk 表示卸载所有openjdk相关文件输入 yum y remove tzdatajava.noarch 卸载t
Java中的浮点数四舍五入到小数点后2位的几种方法
前言 四舍五入到2或3个小数位是我们Java程序员日常开发中肯定会遇到。幸运的是,Java API提供了几种在Java中舍入数字的方法 我们可以使用Math.round(),BigDecimal或DecimalFormat将Java中的任何浮点数四舍五入到n个位置。我个人更喜欢使用BigDecimal在Java中四舍五入任何数字,因为它具有便捷的API并
PAM和账户安全配置
PAM(可插入认证模块)是UNIX系统上一个实现模块化的身份验证模块服务 当程序需要对用户进行身份验证时加载并执行的。PAM文件通常位于/etc/pam.d目录中。 配置文件 /etc/pam.d/passwordauth /etc/pam.d/systemauth /etc/security/pwquality.conf 配置密码创建要
Groovy初探
开始之前 了解本教程的主要内容,以及如何从中获得最大收获。 关于本教程 如果现在有人要开始完全重写 Java,那么 Groovy 就像是 Java 2.0。Groovy 并没有取代 Java,而是作为 Java 的补充,它提供了更简单、更灵活的语法,可以在运行时动态地进行类型检查。您可以使用 Groovy 随意编写 Java 应用程序,连接 Java
《java 核心技术》卷1 学习 概述 第一章Java程序设计概述
从浅面了解Java 1.Java 在语言得地位 现在有所下降 但仍是老大哥 所以值得学习 2.Java特性 1.简单性:从一方面来说 Java可以支持在小型机器上运行 必定不是很复杂得,所以上手不难 2.面向对象:Java有相比于其他的语言 更简单得接口
macOS 11.1 系统偏好设置内无法成功验证密码解决方法
根据官方支持提供:得到一句重要的话: While using macOS Big Sur 11.1, your Mac with Apple T2 Security Chip has an issue that requires resetting the SMC. System Preferences should accept your passwor
security 概念
security 创建核心配置文件java@EnableWebSecuritypublic class SeurityConfig extends WebSecurityConfigurerAdapter{} 改写方法java / 认证 在内存中创建了一个用户
Java里面的十万个为什么
Java里面的十万个为什么 1.不是说 JVM 是运行 Java 程序的虚拟机吗?那 JRE 和 JVM 的关系是怎么样的呢?简单地说,JRE 包含 JVM 。JVM 是运行 Java 程序的核心虚拟机,而运行 Java 程序不仅需要核心虚拟机,还需要其他的类加载器,字节码校验器以及大量的基础类库。JRE 除包含 JVM 之外,还包含运行 Java 程序的其
Java学习路线
阶段一 (夯实基础)Java基础语法学习目标:1.熟悉Java等基本概念2.掌握Eclipse/IDEA集成开发工具的安装、配置和应用3.熟悉Java基本语法、基本类型、运算符和表达式4.掌握分支、循环逻辑语句、数组等知识的应用知识点列表:JDK、JRE、JVM基本概念Java环境搭建和配置安装和使用Eclipse/IDEA开发环境Java基本数据类型变量,
Java开发面试高频考点学习笔记(每日更新)
Java开发面试高频考点学习笔记(每日更新) 1.深拷贝和浅拷贝 2.接口和抽象类的区别 3.java的内存是怎么分配的 4.java中的泛型是什么?类型擦除是什么? 5.Java中的反射是什么 6.序列化与反序列化 7.Object有哪些方法? 8.JVM内存模型 9.类加载机制 10.对象的创建和对象的布局 11.Java的四种引用
2021年度最全面JVM虚拟机,类加载过程与类加载器
前言类装载器子系统是JVM中非常重要的部分,是学习JVM绕不开的一关。一般来说,Java 类的虚拟机使用 Java 方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表
2021年度最全面JVM虚拟机,类加载过程与类加载器
前言类装载器子系统是JVM中非常重要的部分,是学习JVM绕不开的一关。一般来说,Java 类的虚拟机使用 Java 方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表

热门文章

并发编程的基础概念GraphQLRabbitMq 的高级特性

最新文章

GraphQL并发编程的基础概念RabbitMq 的高级特性