当前位置: 首页 > news >正文

西安长安区网站优化地址东莞seo建站投放

西安长安区网站优化地址,东莞seo建站投放,河南专业的做网站的公司,新手做的网站前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…
前言:

通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。

本期目标:

针对上一期的java配置进行修改,优化可读性,易上手程度

正片:

Spring Security Java配置

基于Security Filter Chain,我们对配置进行了分类

                        第一类:Security Filter配置(客体)

                        第二类:Security Filter Chain配置(主体)

基本结构

第一类配置模板:

@Configuration          //用于标记一个类为配置类,表示该类包含Bean的定义。
@EnableWebSecurity      //其中一个功能:注入SecurityFilterChain
public class WebSecurityConfig {//自定义Security Filter 配置......}

第二类配置模板:

public class SecurityWebApplicationInitializerextends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {// 注册Security Filter Chain// 话口号内公式:带有@EnableWebSecurity的类// 一般情况,一个配置可以完成全部功能return new Class[]{WebSecurityConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[0];}@Overrideprotected String[] getServletMappings() {return new String[0];}
}

注意:两段代码的类名不是同一个!侧面表示,不是同一个类

启动程序,运用对比

仅添加框架,无任何配置

基础配置,但未注册

无基础配置,但注册

基础配置并注册

统一内容,无须对比(官方提供的表单登录)

成功登录后

对比内容:

打印日志,登录用的账号密码

对比方式:对代码进行注释化,再启动

在正式对比前,先完善配置

package example.hello_security;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;@Configuration          //用于标记一个类为配置类,表示该类包含Bean的定义。
@EnableWebSecurity      //其中一个功能:注入SecurityFilterChain
public class WebSecurityConfig {//基本配置@Beanpublic UserDetailsService userDetailsService() {InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build());return manager;}}
对比开始
第一轮对比:日志

无配置

有配置,无注册

无配置,有注册

有配置,有注册

通过对比,我们发现了日志中的差距,有配置的没有下面两句话

Using generated security password: e06ee57c-1f9b-4e23-ab3c-058b6a6f85fb

使用生成的安全密码:e06ee57c-1f9b-4e23-ab3c-058b6a6f85fb

This generated password is for development use only. Your security configuration must be updated before running your application in production.

此生成的密码仅供开发使用。在生产环境中运行应用程序之前,必须更新您的安全配置。

结论一:有配置的无生成的安全密码

结论二:无配置的有生成的安全密码

第二轮对比:登录

无配置的可以直接利用生成的安全密码,配合上默认用户user完成登录

因为有配置的没生成的安全密码,无法登录

结论一:无配置,可使用默认用户名和日志中生成的安全密码进行登录认证

结论二:有配置,目前无法进行登录

结论汇总:

结论一:有配置的无生成的安全密码

结论二:无配置的有生成的安全密码

结论三:无配置,可使用默认用户名和日志中生成的安全密码进行登录认证

结论四:有配置,目前无法进行登录

那有配置该怎么进行登录?

再认识,再总结

@Configuration          //用于标记一个类为配置类,表示该类包含Bean的定义。
@EnableWebSecurity      //其中一个功能:注入SecurityFilterChain
public class WebSecurityConfig {//基本配置@Beanpublic UserDetailsService userDetailsService() {InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build());return manager;}}

作者看着源码,然后试着输入了一下,登录成功了!

username :user

password : password

我们修改user和密码试试

修改后的代码

我们去掉注册试试

启动!!!!

没区别

结论1:目前来说,还是不知道注册有啥用

结论2:我们可以通过修改InMemoryUserDetailsManager.createUser方法去自定义登录(前提:基于内存认证)

结合之前的汇总,再总结一次,修改

结论一:有配置的无生成的安全密码

结论二:无配置的有生成的安全密码

结论三:无配置,可使用默认用户名和日志中生成的安全密码进行登录认证

结论四:有配置,目前无法进行登录

结论五:目前来说,还是不知道注册有啥用

结论六:我们可以通过修改InMemoryUserDetailsManager.createUser方法去自定义登录(前提:基于内存认证)

结论一,结论二,结论三保持不变

结论四与结论六结合形成新的结论四:

有配置,可以使用InMemoryUserDetailsManager.createUser方法中的Username和password实参进行登录,也可以修改Username/password进行自定义登录

结论五不变

新结论如下:

结论一:有配置的无生成的安全密码

结论二:无配置的有生成的安全密码

结论三:无配置,可使用默认用户名和日志中生成的安全密码进行登录认证

结论四:有配置,可以使用InMemoryUserDetailsManager.createUser方法中的Username和password实参进行登录,也可以修改Username/password的实参进行自定义登录

结论五:目前来说,还是不知道注册有啥用

进一步认识,再总结

我们将对比,基本配置和默认配置,以及复习InMemoryUserDetailsManager达到进一步认识

@Configuration          //用于标记一个类为配置类,表示该类包含Bean的定义。
@EnableWebSecurity      //其中一个功能:注入SecurityFilterChain
public class WebSecurityConfig {//基本配置@Beanpublic UserDetailsService userDetailsService() {InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();manager.createUser(User.withDefaultPasswordEncoder().username("yanxinru").password("yanxinru233").roles("USER").build());return manager;}//默认配置@Bean@ConditionalOnMissingBean(UserDetailsService.class)InMemoryUserDetailsManager inMemoryUserDetailsManager() {String generatedPassword = "abcdefg123a48721";return new InMemoryUserDetailsManager(User.withUsername("user").password(generatedPassword).roles("ROLE_USER").build());}
}

首先,注释掉基础配置,尝试能否使用username和password里的参数进行登录

很显然无法启动程序

Error creating bean with name 'inMemoryUserDetailsManager' defined in class path resource [example/hello_security/WebSecurityConfig.class]: Failed to instantiate [org.springframework.security.provisioning.InMemoryUserDetailsManager]: Factory method 'inMemoryUserDetailsManager' threw exception with message: ROLE_USER cannot start with ROLE_ (it is automatically added)

创建在类路径资源 [example/hello_security/WebSecurityConfig.class] 中定义的名称为“inMemoryUserDetailsManager”的 Bean 时出错:无法实例化 [org.springframework.security.provisioning.InMemoryUserDetailsManager]:工厂方法“inMemoryUserDetailsManager”引发异常,并显示消息:ROLE_USER不能以 ROLE_ 开头(自动添加)

既然没办法启动,那就pass掉

那就直接进入到复习InMemoryUserDetailsManager阶段

原本想通过对比,引出InMemoryUserDetailsManager它,既然启动不了,那就不对比了,直接进入主题

InMemoryUserDetailsManager有两个功能(目前了解的)

第一个功能:对内存认证提供支持

第二个功能:管理userDetail

在刚刚的体验中,内存这一概念,恐怕不是平常定义的内存(内存大小),而是表单,不,通过体验得到是代码

 @Beanpublic UserDetailsService userDetailsService() {InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();manager.createUser(User.withDefaultPasswordEncoder().username("yanxinru").password("yanxinru233").roles("USER").build());return manager;}

虽然说,代码是存储在内存中的,这也是一种说法,实际体验而言,这个内存特指这段代码,并且通过表单去验证

注意:作者对表单的定义,承载账号密码的载体

打开它的源码

它的形参来源于UserDetails

的实现

我们在基础配置中只使用了三个

回到基础配置使用的方法

通过if的结果,我们可以知道它的作用是什么,存放user,存放我们的基本配置

支持,这两个是用的真神!

内存认证通过支持,什么支持?载体支持,认证不归它管,它还有一个管理UserDetails功能,也是原因这个

总结:InMemoryUserDetailsManager的作用是提供存储用户信息的载体,目前不负责认证

汇总:

结论一:有配置的无生成的安全密码

结论二:无配置的有生成的安全密码

结论三:无配置,可使用默认用户名和日志中生成的安全密码进行登录认证

结论四:有配置,可以使用InMemoryUserDetailsManager.createUser方法中的Username和password实参进行登录,也可以修改Username/password的实参进行自定义登录

结论五:目前来说,还是不知道注册有啥用

结论六:InMemoryUserDetailsManager存放user,存放我们的基本配置

结论七:内存非内存,而是用于验证的载体,表单

http://www.ds6.com.cn/news/26482.html

相关文章:

  • 程序员为什么不敢创业做网站企业网站的域名是该企业的
  • 装修网站php源码查排名官网
  • 宝安做棋牌网站建设哪家好网站关键词排名优化价格
  • 邢台 网站建设足球比赛直播
  • 泰安做网站的公司广告咨询
  • 网页图片居中怎么设置seo简单优化
  • 佛山建设专业网站培训心得体会万能模板
  • 廊坊做网站的企业哪家好如何在百度上做产品推广
  • 页面设计好了怎么做百度优化怎么做
  • 百度站长查询工具全国疫情防控最新数据
  • 新疆公司网站怎么做推广引流吸引人的标题
  • 北京的重要的网站地推平台
  • asp网站 seo百度网站管理员工具
  • wordpress怎么修改模板惠州抖音seo
  • 邯郸网站建设怎么开发百度网盘网页版登录入口
  • 个人网站制作流程图片搜索引擎国外
  • 首页设计的公司官网seoul什么意思
  • 网站建设书籍下载网络推广培训
  • 用asp做网站视频seo包年服务
  • 高端网站建设 企业网站建站长尾关键词排名工具
  • 上海千途建站seo博客是什么意思
  • 域名注册商网站社区营销
  • 做网站销售好不好自己怎么做一个网页
  • 怎样做视频播放网站教育培训加盟
  • 做哪个网站招出国打工的多长沙正规seo优化公司
  • 王野天葛优seo研究
  • 做微信h5的网站西安网站关键词推广
  • b2c商城网站合同暴疯团队seo课程
  • 彩票网站什么做搜索引擎网站提交入口
  • 伯维网站建设百度网站官网入口网址