zoukankan      html  css  js  c++  java
  • Spring Security 基础教程 -- 自定义用户名密码

    Spring Security 简介

    Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。 它是用于保护基于 Spring 的应用程序的实际标准。

    Spring Security 是一个框架,致力于为 Java 应用程序提供身份验证和授权。 像所有 Spring 项目一样,Spring Security 的真正强大之处在于可以轻松扩展以满足自定义要求。

    特点

    • 对身份验证和授权的全面且可扩展的支持

    • 防御会话固定,点击劫持,跨站点请求伪造等攻击

    • Servlet API 集成

    • 与 Spring Web MVC 的可选集成

    Spring Security 官网:

    https://spring.io/projects/spring-security

    https://github.com/spring-projects/spring-security

    Spring Security 初体验

    添加依赖:

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    

    写一个 Controller 类:

    @RestController
    public class HelloController {
        @GetMapping("/hello")
        public String hello(){
            return "Hello Security!";
        }
    }
    

    运行项目,访问http://localhost:8080/hello,回车,如下图:

    只要在项目中间加入了 Spring Security 依赖,所有的地址请求都受到访问控制。

    在没有手动设置用户名和密码的时候,默认用户名为 user,默认密码是一个随机字符串,被打印在控制台中:

    输入默认用户名和默认密码,就能访问 /hello 接口了:

    每次使用默认密码,十分麻烦。接下来就自定义用户名和密码。

    Spring Security 手动设置用户名和密码

    有两种方式来设置用户名和密码,一是在 application.properties 文件中配置,二是写一个 config 类,继承 WebSecurityConfigurerAdapter ,重写方法 configure(AuthenticationManagerBuilder auth) 来设置。

    方法一:application.properties 文件中配置

    配置如下:

    spring.security.user.name=user
    spring.security.user.password=123456
    # 指定用户角色
    spring.security.user.roles=admin
    

    三行配置搞定。需要注意的是,需要给用户指定角色,在 Spring Security 中,是通过用户的角色进行访问权限控制的。

    方法二:写一个 config 类

    写一个 config 类,继承 WebSecurityConfigurerAdapter ,重写方法 configure(AuthenticationManagerBuilder auth) :

    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        /**
         * 这是一个过期的方法
         * 指明密码不用加密
         */
        @Bean
        PasswordEncoder passwordEncoder(){
            return NoOpPasswordEncoder.getInstance();
        }
    
        /**
         * 定义两个用户,并设置密码和角色
         * 从 Spring5.0 开始,密码必须要加密
         * 基于内存的用户认证
         * @param auth
         * @throws Exception
         */
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.inMemoryAuthentication()
                    .withUser("admin")
                    .password("123456")
                    .roles("admin")
                    .and()
                    .withUser("user1")
                    .password("123")
                    .roles("user");
        }
    }
    

    上面,创建了两个用户:admin、user1,并分别赋予角色 admin 和 user 。

    每天学习一点点,每天进步一点点。

  • 相关阅读:
    今年要读的书
    java多线程
    json-lib 使用教程
    tomcat原理
    静态long类型常量serialVersionUID的作用
    使用junit4测试Spring
    MySQL各版本的区别
    spring mvc 下载安装
    hibernate、struts、spring mvc的作用
    【面试】hibernate n+1问题
  • 原文地址:https://www.cnblogs.com/youcoding/p/13903857.html
Copyright © 2011-2022 走看看