通俗易懂的 Spring Security 理解,最简单的Demo (一)

前言

写博客,只是用于记录 我学习和使用过的技术一些技术的心得,借鉴的很多优秀的博文 写的也没有很专业 ,有不好的地方还请大家多多指教。

                                                                      ---- 分割线 ----

通俗易懂的 Spring Security 理解,最简单的Demo (一)

  (一)先将项目搭建好,使用spring boot + spring Security 快速搭建demo

这里我们 主要说 spring security的实现 ,就不演示搭建demo了。

我们这边使用spring官方提供的项目初始化工具进行生产demo 网址:https://start.spring.io/

我们点击进入spring网址选择依赖组件:(spring web starter)、(spring security)、(thymeleaf)

然后我们点击下方绿色的生成项目就ok了
通俗易懂的 Spring Security 理解,最简单的Demo (一)_第1张图片
我是使用idea 来编辑的,将下载完成的项目解压添加入idea中,然后运行项目。
这边我们并没有做任何更改,启动项目 打开网址输入:localhost:8080,可以直接访问。
通俗易懂的 Spring Security 理解,最简单的Demo (一)_第2张图片
ok

  (二)现在我们添加基于内存的用户鉴权功能

我们现在需要先配置 security框架,得先让它通过登录检查,来创建一个类 WebSecurityConfig 并且继承 WebSecurityConfigurerAdapter类 并且我们在代码中注入一个名为 UserDetailsService 的组件。

通俗易懂的 Spring Security 理解,最简单的Demo (一)_第3张图片
先贴出代码先:

import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

/**
 * Created by Administrator on 2019/8/30.
 */
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    // 注入 UserDetailServiceBean
    @Bean
    public UserDetailsService userDetailsService(){
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withUsername("hch").password(new BCryptPasswordEncoder().encode("yjs")).roles("SSS").build());
        return manager;
    }
    
    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

}

ok , 我说一下我的理解
从里面开始看:通俗易懂的 Spring Security 理解,最简单的Demo (一)_第4张图片

这个User是什么意思?点击进去看一下。

通俗易懂的 Spring Security 理解,最简单的Demo (一)_第5张图片

这个 User 实现了UserDetails 和 credentialsContainer , 那UserDetails是干嘛?

在Spring Security的观点中,UserDetails就好比我们自行设计系统的用户、账户的概念。他包含了用户名、密码和其对应的授予权限。
ok User是什么? 有作用? 我们清楚了。

我们再来看一下 注入的 UserDetailsService 的组件,是干什么的?

点进去一看,发现是一个接口:
通俗易懂的 Spring Security 理解,最简单的Demo (一)_第6张图片
继续看:
通俗易懂的 Spring Security 理解,最简单的Demo (一)_第7张图片
InMemoryUserDetailsManager 这个类的父接口 是我们注入的UserDetailsService组件。
我们再翻译一下他们的意思:通俗易懂的 Spring Security 理解,最简单的Demo (一)_第8张图片
在这里就可以简单的认为,在我们输入用户名和密码之后,框架便会通过UserDetailsService 的实现类去寻找验证用户前端输入的用户名和密码是否正确,如果正确则返回UserDetails完成登录操作。Security模式提供了许多种方式的用户信息管理服务实现,比如基于数据库、基于LDAP的。我们当前使用的是最简单基于内存的用户管理实现InMemoryUserDetailsManager。

OK ,我们通过新建InMemoryUserDetailsManager,然后通过createUser方法向其添加了一条用户记录。最终将其注入Spring框架,使其为我们的应用在登录时候可以正确的查找到我们期望的用户记录。
通俗易懂的 Spring Security 理解,最简单的Demo (一)_第9张图片

好了,我们现在创建controller,和html来检验就ok了

controller

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * Created by Administrator on 2019/8/30.
 */
@Controller
public class IndexCotroller {

    @RequestMapping("/")
    public String login() {
        return "index";
    }

}

html


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
<h1>hchyjsh1>
body>
html>

将 html 放在templates下面
重启项目,继续访问 localhost:8080,进行登录。
通俗易懂的 Spring Security 理解,最简单的Demo (一)_第10张图片
OK

你可能感兴趣的:(spring,security)