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 。

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

posted @ 2020-10-30 19:28  爱吃西瓜的番茄酱  阅读(1390)  评论(0编辑  收藏  举报