Spring Security_httpBasic验证模式_2020.06.01

学习基于记录,而不止于记录。

希望自己能坚持下去~

0.写在前面

    记录Spring security简单的一种验证模式。
spring boot版本:2.2.7.RELEASE
开发工具:IntelliJ IDEA 2018.3.2 (Ultimate Edition)
jdk: java version "1.8.0_181"
maven: 3.3.9

1.搭建项目

其中本次测试环境下,jpa依赖是多余的,只是为后续学习提供支持


image.png

2.编写配置类

重写配置类方法,加入自定义配置,规定所有请求必须登陆后才可以访问
SecurityConfig.java

package com.grj.securityDemo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
 * @Author: grj
 * @Date: 2020/6/1 20:10
 */
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //所有请求必须登陆后才可以访问
        http.httpBasic()
                .and()
                .authorizeRequests()
                .anyRequest()
                .authenticated();
    }

}

3.提供测试页面

放到static文件夹下,如果配置了其他静态资源文件夹也可以放其他地方
login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我的登录页</title>
</head>
<body>
    <h2>登录页面</h2>
</body>
</html>

4.启动项目,进行测试

1)注意查看控制台打印,有密码输出(因为这是最基本的一种验证模式,所以用户密码是框架直接提供而不是数据库获取)

Using generated security password: 75d85bd4-8398-48a0-8123-f3761691def8

2)在浏览器打开刚才编写的登录页,会有弹窗,要求输入用户名和密码(这是security提供的弹窗,默认用户user,密码是刚才控制台打印的字符串)


image.png

5.如何自定义用户名和密码?

1)application.properties

#security
spring.security.user.name=grj
spring.security.user.password=admin2

2)重启项目测试,输入刚才的用户名和密码就可以正常访问

6.这种验证方式靠谱吗?有应用场景吗?

1)不靠谱。
肯定不靠谱,因为只要有点基础的就可以反向解密。
如何解密?
还是刚才那么页面请求,输入用户名和密码之后,在浏览器F12打开调试面板

image.png

把Authorization: Basic Z3JqOmFkbWluMg==里面的Z3JqOmFkbWluMg==输入到任意一个base64解密网站,就可以获取到明文密码(我用的是这个网站

image.png

很明显,用户名和密码全都暴露了。。。

2)但是这种验证模式还是有应用场景的
说白了,就是破窗理论,你自己整了一个小项目,可能存一些你自己的总结经验,不希望所有人都看到,但是又不希望专门搞个很复杂的验证,就可以用这种方式。

7.总结

httpBasic验证模式只是适用于极少的清空下,并且安全性不高,生产环境下不适用,后面会继续总结security的实际应用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。