您的位置 首页 > 德语词汇

configuration是什么意思,configuration的意思翻译、用法,Configuration

大家好,今天来为大家解答configuration是什么意思,configuration的意思翻译、用法这个问题的一些问题点,包括Configuration也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

configuration是什么意思,configuration的意思翻译、用法,Configuration

本站(springdoc.cn)中的内容来源于spring.io,原始版权归属于spring.io。由springdoc.cn进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。商标声明:Spring是PivotalSoftware,Inc.在美国以及其他国家的商标。

在Spring3.1中,Spring框架加入了对Javaconfiguration的一般支持。SpringSecurity3.2引入了Java配置,让用户无需使用任何XML就能配置SpringSecurity。

如果你熟悉SecurityNamespace配置,你应该会发现它与SpringSecurityJava配置之间有不少相似之处。

SpringSecurity提供了大量的示例应用程序来演示SpringSecurityJava配置的使用。

第一步是创建我们的SpringSecurityJava配置。该配置创建了一个被称为springSecurityFilterChain的Servlet过滤器,它负责应用程序中的所有安全问题(保护应用程序的URL,验证提交的用户名和密码,重定向到登录表单,等等)。下面的例子显示了SpringSecurityJava配置的最基本例子。

importorg.springframework.beans.factory.annotation.Autowired;\n\nimportorg.springframework.context.annotation.*;\nimportorg.springframework.security.config.annotation.authentication.builders.*;\nimportorg.springframework.security.config.annotation.web.configuration.*;\n\n@Configuration\n@EnableWebSecurity\npublicclassWebSecurityConfig{\n\n\t@Bean\n\tpublicUserDetailsServiceuserDetailsService(){\n\t\tInMemoryUserDetailsManagermanager=newInMemoryUserDetailsManager();\n\t\tmanager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build());\n\t\treturnmanager;\n\t}\n}

这个配置并不复杂或广泛,但它做了很多事情。

下一步是在WAR文件中注册springSecurityFilterChain。你可以在Servlet3.0以上的环境中通过Spring的WebApplicationInitializer支持在Java配置中完成。毫不奇怪,SpringSecurity提供了一个基类(AbstractSecurityWebApplicationInitializer)来确保springSecurityFilterChain为你注册。我们使用AbstractSecurityWebApplicationInitializer的方式有所不同,这取决于我们是否已经在使用Spring,或者SpringSecurity是否是我们应用中唯一的Spring组件。

如果你没有使用Spring或SpringMVC,你需要将WebSecurityConfig传递给超类(superclass)以确保配置被接收。

importorg.springframework.security.web.context.*;\n\npublicclassSecurityWebApplicationInitializer\n\textendsAbstractSecurityWebApplicationInitializer{\n\n\tpublicSecurityWebApplicationInitializer(){\n\t\tsuper(WebSecurityConfig.class);\n\t}\n}

SecurityWebApplicationInitializer:

如果我们在应用的其他地方使用Spring,我们可能已经有一个WebApplicationInitializer,正在加载我们的Spring配置。如果我们使用之前的配置,我们会得到一个错误。相反,我们应该用现有的ApplicationContext注册SpringSecurity。例如,如果我们使用SpringMVC,我们的SecurityWebApplicationInitializer可能看起来像下面这样。

importorg.springframework.security.web.context.*;\n\npublicclassSecurityWebApplicationInitializer\n\textendsAbstractSecurityWebApplicationInitializer{\n\n}

这只是为你应用程序中的每个URL注册springSecurityFilterChain。之后,我们需要确保WebSecurityConfig被加载到我们现有的ApplicationInitializer中。例如,如果我们使用SpringMVC,它会被添加到getRootConfigClasses()中。

publicclassMvcWebApplicationInitializerextends\n\t\tAbstractAnnotationConfigDispatcherServletInitializer{\n\n\t@Override\n\tprotectedClass<?>[]getRootConfigClasses(){\n\t\treturnnewClass[]{WebSecurityConfig.class};\n\t}\n\n\t//...otheroverrides...\n}HttpSecurity

到目前为止,我们的WebSecurityConfig只包含了关于如何验证用户的信息。SpringSecurity是如何知道我们要要求所有的用户都要进行身份验证的?SpringSecurity如何知道我们要支持基于表单的认证?实际上,有一个配置类(称为SecurityFilterChain)在幕后被调用。它被配置为以下的默认实现。

@Bean\npublicSecurityFilterChainfilterChain(HttpSecurityhttp)throwsException{\n\thttp\n\t\t.authorizeRequests(authorize->authorize\n\t\t\t.anyRequest().authenticated()\n\t\t)\n\t\t.formLogin(withDefaults())\n\t\t.httpBasic(withDefaults());\n\treturnhttp.build();\n}

默认配置(如上例所示):

请注意,这种配置与XML命名空间的配置是平行的。

<http>\n\t<intercept-urlpattern="/**"access="authenticated"/>\n\t<form-login/>\n\t<http-basic/>\n</http>多个HttpSecurity实例

我们可以配置多个HttpSecurity实例,就像我们可以在XML中拥有多个<http>节点一样。关键是要注册多个SecurityFilterChain@Bean。下面的例子对以/api/开头的URL有不同的配置。

@Configuration\n@EnableWebSecurity\npublicclassMultiHttpSecurityConfig{\n\t@Bean\n\tpublicUserDetailsServiceuserDetailsService()throwsException{\n\t\t//ensurethepasswordsareencodedproperly\n\t\tUserBuilderusers=User.withDefaultPasswordEncoder();\n\t\tInMemoryUserDetailsManagermanager=newInMemoryUserDetailsManager();\n\t\tmanager.createUser(users.username("user").password("password").roles("USER").build());\n\t\tmanager.createUser(users.username("admin").password("password").roles("USER","ADMIN").build());\n\t\treturnmanager;\n\t}\n\n\t@Bean\n\t@Order(1)\n\tpublicSecurityFilterChainapiFilterChain(HttpSecurityhttp)throwsException{\n\t\thttp\n\t\t\t.securityMatcher("/api/**")\n\t\t\t.authorizeHttpRequests(authorize->authorize\n\t\t\t\t.anyRequest().hasRole("ADMIN")\n\t\t\t)\n\t\t\t.httpBasic(withDefaults());\n\t\treturnhttp.build();\n\t}\n\n\t@Bean\n\tpublicSecurityFilterChainformLoginFilterChain(HttpSecurityhttp)throwsException{\n\t\thttp\n\t\t\t.authorizeHttpRequests(authorize->authorize\n\t\t\t\t.anyRequest().authenticated()\n\t\t\t)\n\t\t\t.formLogin(withDefaults());\n\t\treturnhttp.build();\n\t}\n}

像往常一样配置认证。

创建一个SecurityFilterChain的实例,其中包含@Order以指定哪一个SecurityFilterChain应该被优先考虑。

http.securityMatcher指出,这个HttpSecurity只适用于以/api/开头的URL。

创建另一个SecurityFilterChain的实例。如果URL不是以/api/开头,就会使用这个配置。这个配置被认为在apiFilterChain之后,因为它的@Order值在1之后(没有@Order默认为最后)。

你可以在SpringSecurity中提供你自己的自定义DSL。

publicclassMyCustomDslextendsAbstractHttpConfigurer<MyCustomDsl,HttpSecurity>{\n\tprivatebooleanflag;\n\n\t@Override\n\tpublicvoidinit(HttpSecurityhttp)throwsException{\n\t\t//anymethodthataddsanotherconfigurer\n\t\t//mustbedoneintheinitmethod\n\t\thttp.csrf().disable();\n\t}\n\n\t@Override\n\tpublicvoidconfigure(HttpSecurityhttp)throwsException{\n\t\tApplicationContextcontext=http.getSharedObject(ApplicationContext.class);\n\n\t\t//herewelookupfromtheApplicationContext.Youcanalsojustcreateanewinstance.\n\t\tMyFiltermyFilter=context.getBean(MyFilter.class);\n\t\tmyFilter.setFlag(flag);\n\t\thttp.addFilterBefore(myFilter,UsernamePasswordAuthenticationFilter.class);\n\t}\n\n\tpublicMyCustomDslflag(booleanvalue){\n\t\tthis.flag=value;\n\t\treturnthis;\n\t}\n\n\tpublicstaticMyCustomDslcustomDsl(){\n\t\treturnnewMyCustomDsl();\n\t}\n}

这实际上是HttpSecurity.authorizeRequests()等方法的实现方式。

@Configuration\n@EnableWebSecurity\npublicclassConfig{\n\t@Bean\n\tpublicSecurityFilterChainfilterChain(HttpSecurityhttp)throwsException{\n\t\thttp\n\t\t\t.with(MyCustomDsl.customDsl(),(dsl)->dsl\n\t\t\t\t.flag(true)\n\t\t\t)\n\t\t\t//...\n\t\treturnhttp.build();\n\t}\n}

该代码按以下顺序调用。

如果你愿意,你可以通过使用SpringFactories让HttpSecurity默认添加MyCustomDsl。例如,你可以在classpath上创建一个名为META-INF/spring.factories的资源,内容如下。

org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer=sample.MyCustomDsl

你也可以明确地禁用默认值。

@Configuration\n@EnableWebSecurity\npublicclassConfig{\n\t@Bean\n\tpublicSecurityFilterChainfilterChain(HttpSecurityhttp)throwsException{\n\t\thttp\n\t\t\t.with(MyCustomDsl.customDsl(),(dsl)->dsl\n\t\t\t\t.disable()\n\t\t\t)\n\t\t\t...;\n\t\treturnhttp.build();\n\t}\n}后处理配置对象

SpringSecurity的Java配置并没有公开它所配置的每个对象的每个属性。这为大多数用户简化了配置。毕竟,如果每个属性都暴露出来,用户可以使用标准的bean配置。

虽然有很好的理由不直接暴露每个属性,但用户可能仍然需要更高级的配置选项。为了解决这个问题,SpringSecurity引入了ObjectPostProcessor的概念,它可以用来修改或替换许多由Java配置创建的Object实例。例如,为了配置FilterSecurityInterceptor上的filterSecurityPublishAuthorizationSuccess属性,你可以使用下面的方法。

关于configuration是什么意思,configuration的意思翻译、用法和Configuration的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023