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

做seo网站不用域名企业建站流程

做seo网站不用域名,企业建站流程,网站开发主要用什么语言,广州市几个区Spring Boot集成Spring Security之自动装配介绍 一、实现功能及软件版本说明二、创建Spring Boot项目三、查看自动装配配置类四、自动装配配置类之SecurityAutoConfiguration1、SecurityAutoConfiguration部分源码2、主要作用3、SpringBootWebSecurityConfiguration3.1、Spring…

Spring Boot集成Spring Security之自动装配介绍

  • 一、实现功能及软件版本说明
  • 二、创建Spring Boot项目
  • 三、查看自动装配配置类
  • 四、自动装配配置类之SecurityAutoConfiguration
    • 1、SecurityAutoConfiguration部分源码
    • 2、主要作用
    • 3、SpringBootWebSecurityConfiguration
      • 3.1、SpringBootWebSecurityConfiguration部分源码
      • 3.2、主要作用
    • 4、@EnableWebSecurity
      • 4.1、部分源码
      • 4.2、主要作用
    • 5、WebSecurityConfiguration
      • 5.1、部分源码
      • 5.2、主要作用
    • 6、HttpSecurityConfiguration
      • 6.1、部分源码
      • 6.2、主要作用
  • 五、自动装配配置类之UserDetailsServiceAutoConfiguration
    • 1、部分源码
    • 2、主要作用
  • 六、自动装配配置类之SecurityFilterAutoConfiguration
    • 1、部分源码
    • 2、主要作用

一、实现功能及软件版本说明

  1. 使用Spring Boot集成Spring Security实现Servlet项目的安全个性化配置
  2. Spring Boot版本:2.7.18
  3. Spring Security版本:5.7.11

二、创建Spring Boot项目

  1. 创建Spring Boot项目,目录结构如下
    Spring Boot目录结构
  2. 引入Spring Security包,完成pom.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/></parent><groupId>com.yu</groupId><artifactId>spring-boot-security2-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-boot-security2-demo</name><description>Spring Boot集成Spring Security样例</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency></dependencies></project>

三、查看自动装配配置类

  1. 查看Security Servlet相关自动装配配置类
    自动装配配置

四、自动装配配置类之SecurityAutoConfiguration

1、SecurityAutoConfiguration部分源码

@AutoConfiguration
@ConditionalOnClass(DefaultAuthenticationEventPublisher.class)
@EnableConfigurationProperties(SecurityProperties.class)
@Import({ SpringBootWebSecurityConfiguration.class, SecurityDataConfiguration.class })
public class SecurityAutoConfiguration {@Bean@ConditionalOnMissingBean(AuthenticationEventPublisher.class)public DefaultAuthenticationEventPublisher authenticationEventPublisher(ApplicationEventPublisher publisher) {return new DefaultAuthenticationEventPublisher(publisher);}}

2、主要作用

  1. 导入SpringBootWebSecurityConfiguration

3、SpringBootWebSecurityConfiguration

3.1、SpringBootWebSecurityConfiguration部分源码

@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
class SpringBootWebSecurityConfiguration {@Configuration(proxyBeanMethods = false)@ConditionalOnDefaultWebSecuritystatic class SecurityFilterChainConfiguration {@Bean@Order(SecurityProperties.BASIC_AUTH_ORDER)SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated();http.formLogin();http.httpBasic();return http.build();}}@Configuration(proxyBeanMethods = false)@ConditionalOnMissingBean(name = BeanIds.SPRING_SECURITY_FILTER_CHAIN)@ConditionalOnClass(EnableWebSecurity.class)@EnableWebSecuritystatic class WebSecurityEnablerConfiguration {}}

3.2、主要作用

  1. 默认Security配置(Spring容器中没有SecurityFilterChain和WebSecurityConfigurerAdapter)时,向Spring容器中注入默认过滤器链,即用户没有自定义过滤器链时,生成默认过滤器链
    默认过滤器链
  2. Spring容器中不存在名称为springSecurityFilterChain对象时,启用WebSecurity,即用户未显示的启用WebSecurity时,隐式的启用WebSecurity
    在这里插入图片描述

4、@EnableWebSecurity

4.1、部分源码

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import({ WebSecurityConfiguration.class, SpringWebMvcImportSelector.class, OAuth2ImportSelector.class,HttpSecurityConfiguration.class })
@EnableGlobalAuthentication
@Configuration
public @interface EnableWebSecurity {/*** Controls debugging support for Spring Security. Default is false.* @return if true, enables debug support with Spring Security*/boolean debug() default false;}

4.2、主要作用

  1. 导入WebSecurityConfiguration
  2. 导入HttpSecurityConfiguration

5、WebSecurityConfiguration

5.1、部分源码

@Configuration(proxyBeanMethods = false)
public class WebSecurityConfiguration implements ImportAware, BeanClassLoaderAware {
@Bean(name = AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME)public Filter springSecurityFilterChain() throws Exception {boolean hasConfigurers = this.webSecurityConfigurers != null && !this.webSecurityConfigurers.isEmpty();boolean hasFilterChain = !this.securityFilterChains.isEmpty();Assert.state(!(hasConfigurers && hasFilterChain),"Found WebSecurityConfigurerAdapter as well as SecurityFilterChain. Please select just one.");if (!hasConfigurers && !hasFilterChain) {WebSecurityConfigurerAdapter adapter = this.objectObjectPostProcessor.postProcess(new WebSecurityConfigurerAdapter() {});this.webSecurity.apply(adapter);}for (SecurityFilterChain securityFilterChain : this.securityFilterChains) {this.webSecurity.addSecurityFilterChainBuilder(() -> securityFilterChain);for (Filter filter : securityFilterChain.getFilters()) {if (filter instanceof FilterSecurityInterceptor) {this.webSecurity.securityInterceptor((FilterSecurityInterceptor) filter);break;}}}for (WebSecurityCustomizer customizer : this.webSecurityCustomizers) {customizer.customize(this.webSecurity);}return this.webSecurity.build();}
}

5.2、主要作用

  1. 两种方式注册过滤器链:
    • 继承WebSecurityConfigurerAdapter(本质是实现SecurityConfigurer接口) (已弃用)
    • 直接向Spring容器种注册SecurityFilterChain对象
  2. 没有默认的过滤器链时,使用WebSecurityConfigurerAdapter中默认配置生成过滤器链
  3. 根据配置的SecurityFilterChain集合构建FilterChainProxy类型的对象并注入到Spring容器中名称为springSecurityFilterChain

6、HttpSecurityConfiguration

6.1、部分源码

@Configuration(proxyBeanMethods = false)
class HttpSecurityConfiguration {@Bean(HTTPSECURITY_BEAN_NAME)@Scope("prototype")HttpSecurity httpSecurity() throws Exception {WebSecurityConfigurerAdapter.LazyPasswordEncoder passwordEncoder = new WebSecurityConfigurerAdapter.LazyPasswordEncoder(this.context);AuthenticationManagerBuilder authenticationBuilder = new WebSecurityConfigurerAdapter.DefaultPasswordEncoderAuthenticationManagerBuilder(this.objectPostProcessor, passwordEncoder);authenticationBuilder.parentAuthenticationManager(authenticationManager());authenticationBuilder.authenticationEventPublisher(getAuthenticationEventPublisher());HttpSecurity http = new HttpSecurity(this.objectPostProcessor, authenticationBuilder, createSharedObjects());// @formatter:offhttp.csrf(withDefaults()).addFilter(new WebAsyncManagerIntegrationFilter()).exceptionHandling(withDefaults()).headers(withDefaults()).sessionManagement(withDefaults()).securityContext(withDefaults()).requestCache(withDefaults()).anonymous(withDefaults()).servletApi(withDefaults()).apply(new DefaultLoginPageConfigurer<>());http.logout(withDefaults());// @formatter:onapplyDefaultConfigurers(http);return http;}
}

6.2、主要作用

  1. Spring容器中注册HttpSecurity对象
  2. httpSecurity用于配置构建自定义过滤器链

五、自动装配配置类之UserDetailsServiceAutoConfiguration

1、部分源码

@AutoConfiguration
@ConditionalOnClass(AuthenticationManager.class)
@ConditionalOnBean(ObjectPostProcessor.class)
@ConditionalOnMissingBean(value = { AuthenticationManager.class, AuthenticationProvider.class, UserDetailsService.class,AuthenticationManagerResolver.class },type = { "org.springframework.security.oauth2.jwt.JwtDecoder","org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector","org.springframework.security.oauth2.client.registration.ClientRegistrationRepository","org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository" })
public class UserDetailsServiceAutoConfiguration {@Bean@Lazypublic InMemoryUserDetailsManager inMemoryUserDetailsManager(SecurityProperties properties,ObjectProvider<PasswordEncoder> passwordEncoder) {SecurityProperties.User user = properties.getUser();List<String> roles = user.getRoles();return new InMemoryUserDetailsManager(User.withUsername(user.getName()).password(getOrDeducePassword(user, passwordEncoder.getIfAvailable())).roles(StringUtils.toStringArray(roles)).build());}private String getOrDeducePassword(SecurityProperties.User user, PasswordEncoder encoder) {String password = user.getPassword();if (user.isPasswordGenerated()) {logger.warn(String.format("%n%nUsing generated security password: %s%n%nThis generated password is for development use only. "+ "Your security configuration must be updated before running your application in "+ "production.%n",user.getPassword()));}if (encoder != null || PASSWORD_ALGORITHM_PATTERN.matcher(password).matches()) {return password;}return NOOP_PASSWORD_PREFIX + password;}

2、主要作用

  1. 用户未自定义认证接口时,生成默认认证接口inMemoryUserDetailsManager(基于内存用户认证)
  2. 生成默认名称为user,密码为随机生成的uuid(项目启动时会打印在控制台中),角色为空的用户存入内存中
#UserDetailsServiceAutoConfiguration.inMemoryUserDetailsManager方法中获取user对象
SecurityProperties.User user = properties.getUser();
#SecurityProperties中的Userpublic static class User {private String name = "user";private String password = UUID.randomUUID().toString();private List<String> roles = new ArrayList<>();}
  1. 通过配置文件可以修改默认用户名、密码、角色(示例如下)
    配置默认用户名、密码、角色

六、自动装配配置类之SecurityFilterAutoConfiguration

1、部分源码

@AutoConfiguration(after = SecurityAutoConfiguration.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(SecurityProperties.class)
@ConditionalOnClass({ AbstractSecurityWebApplicationInitializer.class, SessionCreationPolicy.class })
public class SecurityFilterAutoConfiguration {private static final String DEFAULT_FILTER_NAME = AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME;@Bean@ConditionalOnBean(name = DEFAULT_FILTER_NAME)public DelegatingFilterProxyRegistrationBean securityFilterChainRegistration(SecurityProperties securityProperties) {DelegatingFilterProxyRegistrationBean registration = new DelegatingFilterProxyRegistrationBean(DEFAULT_FILTER_NAME);registration.setOrder(securityProperties.getFilter().getOrder());registration.setDispatcherTypes(getDispatcherTypes(securityProperties));return registration;}private EnumSet<DispatcherType> getDispatcherTypes(SecurityProperties securityProperties) {if (securityProperties.getFilter().getDispatcherTypes() == null) {return null;}return securityProperties.getFilter().getDispatcherTypes().stream().map((type) -> DispatcherType.valueOf(type.name())).collect(Collectors.toCollection(() -> EnumSet.noneOf(DispatcherType.class)));}}

2、主要作用

  1. 注册DelegatingFilterProxyRegistrationBean(委托过滤器代理注册Bean)
  2. 设置代理目标Bean对象名称为springSecurityFilterChain

文章转载自:
http://dinncozeloso.wbqt.cn
http://dinncoashery.wbqt.cn
http://dinncomesenchyma.wbqt.cn
http://dinncofold.wbqt.cn
http://dinncorealistic.wbqt.cn
http://dinncobahai.wbqt.cn
http://dinncoshintoist.wbqt.cn
http://dinncogitano.wbqt.cn
http://dinncopraxiology.wbqt.cn
http://dinncohoncho.wbqt.cn
http://dinncoelectrotherapist.wbqt.cn
http://dinncodownfall.wbqt.cn
http://dinncofunicle.wbqt.cn
http://dinncobedbug.wbqt.cn
http://dinncowordsplitting.wbqt.cn
http://dinncoabandoned.wbqt.cn
http://dinncoforficiform.wbqt.cn
http://dinncosustaining.wbqt.cn
http://dinncoindefeasible.wbqt.cn
http://dinncomusing.wbqt.cn
http://dinncotartlet.wbqt.cn
http://dinncopassionate.wbqt.cn
http://dinncostokehole.wbqt.cn
http://dinncothyroidectomize.wbqt.cn
http://dinncoworkless.wbqt.cn
http://dinncomandolin.wbqt.cn
http://dinncoarlene.wbqt.cn
http://dinncospeedster.wbqt.cn
http://dinncocommeasurable.wbqt.cn
http://dinncopredicant.wbqt.cn
http://dinncopippa.wbqt.cn
http://dinncohayfield.wbqt.cn
http://dinncofram.wbqt.cn
http://dinncononmiscibility.wbqt.cn
http://dinncopanelling.wbqt.cn
http://dinncocanine.wbqt.cn
http://dinncoteachery.wbqt.cn
http://dinncosprinkle.wbqt.cn
http://dinncobhave.wbqt.cn
http://dinncocaribbean.wbqt.cn
http://dinncoanaemic.wbqt.cn
http://dinncospooney.wbqt.cn
http://dinncoflocculi.wbqt.cn
http://dinncotorsi.wbqt.cn
http://dinncozymogram.wbqt.cn
http://dinncosaprolite.wbqt.cn
http://dinncorigaudon.wbqt.cn
http://dinncoquivive.wbqt.cn
http://dinncooffput.wbqt.cn
http://dinncoantrorse.wbqt.cn
http://dinncobisulphate.wbqt.cn
http://dinncoergotize.wbqt.cn
http://dinncounapprehensive.wbqt.cn
http://dinncosynergamy.wbqt.cn
http://dinncopyrrhotite.wbqt.cn
http://dinncoclowder.wbqt.cn
http://dinncounsnap.wbqt.cn
http://dinnconautiloid.wbqt.cn
http://dinncopogonotrophy.wbqt.cn
http://dinncoluminesce.wbqt.cn
http://dinncodamoclean.wbqt.cn
http://dinncowarder.wbqt.cn
http://dinncoparanasal.wbqt.cn
http://dinncokirk.wbqt.cn
http://dinncoevangelicalism.wbqt.cn
http://dinncoperipherally.wbqt.cn
http://dinncosootiness.wbqt.cn
http://dinncometiculosity.wbqt.cn
http://dinncosubsection.wbqt.cn
http://dinncoacatalectic.wbqt.cn
http://dinncogynogenesis.wbqt.cn
http://dinncoballoon.wbqt.cn
http://dinncoimperium.wbqt.cn
http://dinncohumidor.wbqt.cn
http://dinncognomic.wbqt.cn
http://dinncopolycentric.wbqt.cn
http://dinncodormouse.wbqt.cn
http://dinncolestobiotic.wbqt.cn
http://dinncourologic.wbqt.cn
http://dinncounconsidering.wbqt.cn
http://dinncoshoring.wbqt.cn
http://dinncorattiness.wbqt.cn
http://dinncotranslunary.wbqt.cn
http://dinncojwv.wbqt.cn
http://dinncokioto.wbqt.cn
http://dinncopiddle.wbqt.cn
http://dinncointervention.wbqt.cn
http://dinncoprythee.wbqt.cn
http://dinncorefix.wbqt.cn
http://dinnconina.wbqt.cn
http://dinncofranz.wbqt.cn
http://dinncomelinite.wbqt.cn
http://dinncosequitur.wbqt.cn
http://dinncoanybody.wbqt.cn
http://dinncotopiary.wbqt.cn
http://dinncocircuitry.wbqt.cn
http://dinncofluidonics.wbqt.cn
http://dinncodewater.wbqt.cn
http://dinncocentrosome.wbqt.cn
http://dinncomajestical.wbqt.cn
http://www.dinnco.com/news/124495.html

相关文章:

  • 网络公司网站vivo应用商店
  • 青岛企业建站百度数据
  • wordpress的开发文档南宁百度seo排名价格
  • 网站做短信接口具体方法如何优化推广中的关键词
  • 怎样设计一个网站厦门网站优化
  • 网站内容运营是什么推广普通话内容100字
  • 个人备案网站做淘宝客seo黑帽有哪些技术
  • 广告设计与制作专升本seo专业培训课程
  • 网站开发时app打开很慢如何做网销
  • 做互助盘网站b2b电子商务网站
  • 网站设计的指导思想十大免费网站推广入口
  • 学校官方网站建设网站的网站首页
  • wordpress导出sqlseo流量增加软件
  • 网站别人做的上面有方正字体微信搜一搜seo优化
  • 厦门网站建设服务公司小璇seo优化网站
  • 仙居建设规划局网站什么平台推广效果最好
  • 网站分为哪些结构google官方下载app
  • 桓台网站推广百度竞价推广收费
  • 专门做金融的招聘网站品牌营销策划书
  • 惠州模板网站广告搜索引擎
  • 卖东西怎么做网站郑州见效果付费优化公司
  • 做网站收费 知乎轻饮食网络推广方案
  • 门户网站建设为企业带来的好处seo顾问是什么
  • 毕业设计做网站还是系统好百度推广费
  • 360免费建站模板营业推广方式
  • 一流的聊城做网站费用湖南网站推广公司
  • 重庆微信网站开常用seo站长工具
  • 免费软件安装网站seo分析报告
  • 太原网站优化哪家专业网站关键词排名优化电话
  • 可口可乐网站建设目的免费百度广告怎么投放