`
aasonwu
  • 浏览: 35217 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring Security 内置的InMemoryUserDetailsManager配置过程

 
阅读更多

InMemoryUserDetailsManager是Spring Security 内置的实现UserDetailsManager 接口的默认配置实现。它主要负责从配置文件中加载用户的账户信息。观察Spring Security源代码可清晰发现其配置过程。

 

  1. UserServiceBeanDefinitionParser类解析配置文件<user-service>元素。代码第6行:
    private void loadParsers() {
            // Parsers
            parsers.put(Elements.LDAP_PROVIDER, new LdapProviderBeanDefinitionParser());
            parsers.put(Elements.LDAP_SERVER, new LdapServerBeanDefinitionParser());
            parsers.put(Elements.LDAP_USER_SERVICE, new LdapUserServiceBeanDefinitionParser());
            parsers.put(Elements.USER_SERVICE, new UserServiceBeanDefinitionParser());
            parsers.put(Elements.JDBC_USER_SERVICE, new JdbcUserServiceBeanDefinitionParser());
            parsers.put(Elements.AUTHENTICATION_PROVIDER, new AuthenticationProviderBeanDefinitionParser());
            parsers.put(Elements.GLOBAL_METHOD_SECURITY, new GlobalMethodSecurityBeanDefinitionParser());
            parsers.put(Elements.AUTHENTICATION_MANAGER, new AuthenticationManagerBeanDefinitionParser());
            parsers.put(Elements.METHOD_SECURITY_METADATA_SOURCE, new MethodSecurityMetadataSourceBeanDefinitionParser());
    
            // Only load the web-namespace parsers if the web classes are available
            if(ClassUtils.isPresent(FILTER_CHAIN_PROXY_CLASSNAME, getClass().getClassLoader())) {
                parsers.put(Elements.DEBUG, new DebugBeanDefinitionParser());
                parsers.put(Elements.HTTP, new HttpSecurityBeanDefinitionParser());
                parsers.put(Elements.HTTP_FIREWALL, new HttpFirewallBeanDefinitionParser());
                parsers.put(Elements.FILTER_INVOCATION_DEFINITION_SOURCE, new FilterInvocationSecurityMetadataSourceParser());
                parsers.put(Elements.FILTER_SECURITY_METADATA_SOURCE, new FilterInvocationSecurityMetadataSourceParser());
                parsers.put(Elements.FILTER_CHAIN, new FilterChainBeanDefinitionParser());
                filterChainMapBDD = new FilterChainMapBeanDefinitionDecorator();
            }
        }
     
  2. UserServiceBeanDefinitionParser类有一个方法:getBeanClassName:
    protected String getBeanClassName(Element element) {
            return InMemoryUserDetailsManager.class.getName();
        }
     
  3. UserServiceBeanDefinitionParser父类AbstractUserDetailsServiceBeanDefinitionParser的parse方法内部创建InMemoryUserDetailsManager,代码第2行:
    public BeanDefinition parse(Element element, ParserContext parserContext) {
            BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(getBeanClassName(element));
    
            doParse(element, parserContext, builder);
    
            RootBeanDefinition userService = (RootBeanDefinition) builder.getBeanDefinition();
            final String beanId = resolveId(element, userService, parserContext);
    
            parserContext.registerBeanComponent(new BeanComponentDefinition(userService, beanId));
    
            String cacheRef = element.getAttribute(CACHE_REF);
    
            // Register a caching version of the user service if there's a cache-ref
            if (StringUtils.hasText(cacheRef)) {
                BeanDefinitionBuilder cachingUSBuilder = BeanDefinitionBuilder.rootBeanDefinition(CachingUserDetailsService.class);
                cachingUSBuilder.addConstructorArgReference(beanId);
    
                cachingUSBuilder.addPropertyValue("userCache", new RuntimeBeanReference(cacheRef));
                BeanDefinition cachingUserService = cachingUSBuilder.getBeanDefinition();
                parserContext.registerBeanComponent(new BeanComponentDefinition(cachingUserService, beanId + CACHING_SUFFIX));
            }
    
            return null;
        }
     
分享到:
评论

相关推荐

    springsecurity使用配置详解

    在本文中,我们将深入探讨Spring Security的配置及其在实际应用中的使用。 首先,Spring Security的核心概念包括用户、角色、权限和访问控制。它提供了一种机制来验证用户身份(身份验证),并决定用户是否可以访问...

    spring security 项目配置源码

    下面将详细介绍Spring Security的核心概念、配置过程以及如何在Eclipse环境中运行该项目。 1. **核心概念** - **身份验证(Authentication)**:确认用户身份的过程,通常通过用户名和密码进行。 - **授权...

    Spring Security in Action

    Spring Security 实践指南 ...* 高度可配置性:Spring Security 的配置项非常灵活,可以根据实际需求进行配置。 Spring Security 是一个功能强大且灵活的安全框架,广泛应用于 Java 应用开发中。

    spring security xml方式配置

    总结来说,Spring Security XML配置涉及到的主要知识点包括:`&lt;http&gt;`元素的设置、拦截URL的配置、`&lt;authentication-manager&gt;`和`&lt;authentication-provider&gt;`的使用、自定义登录表单的实现以及Spring MVC和Bootstrap...

    spring security 使用及配置

    Spring Security 使用及配置 Spring Security 是一个基于 Java 的安全框架,提供了丰富的安全功能,包括身份验证、授权、加密、会话管理等。下面将对 Spring Security 的使用及配置进行详细介绍。 身份验证 身份...

    spring security2配置

    在这个"Spring Security2配置"的主题中,我们将深入探讨如何配置Spring Security来保护我们的应用程序,以及它的一些核心概念。 首先,让我们理解Spring Security的基本组件。`Users.java`、`Roles.java`暗示了用户...

    Spring Security 资料合集

    - **Java配置**:随着Spring Boot的发展,Spring Security也提供了Java配置方式,更易于理解和维护,通过`@EnableWebSecurity`和`WebSecurityConfigurerAdapter`的子类进行配置。 4. **Remember-Me服务**: - ...

    SpringSecurity.pdf

    Spring Security的配置灵活,可以通过XML配置文件、Java配置类或者注解来定制安全策略。它还提供了大量的扩展点,允许开发者根据自己的业务需求进行定制和扩展。 Spring Security的学习过程可以分为入门、进阶和...

    spring-security3 配置和使用

    Spring Security 3 配置和使用 Spring Security 是一个强大且灵活的安全框架,旨在保护基于 Java 的 Web 应用程序。Spring Security 3 是 Spring Security 框架的第三个主要版本,提供了许多新的功能和改进。下面...

    SpringSecurity笔记,编程不良人笔记

    SpringSecurity提供`Authentication`接口,用于处理身份验证过程。 - **Authorization**: 授权是指决定用户是否有权限访问某个资源。SpringSecurity支持基于角色的访问控制(RBAC)和其他授权模型。 - **Access ...

    springsecurity学习笔记

    - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和AccessDecisionManager。 - 使用@Secured和@PreAuthorize注解进行方法级别的...

    最详细Spring Security学习资料(源码)

    攻击防护:Spring Security内置了对常见攻击(如跨站点请求伪造、会话固定攻击、点击劫持等)的防护机制,帮助开发者提高应用程序的安全性。 会话管理:Spring Security支持对用户会话状态的管理,包括会话超时、...

    spring security3配置和使用实例+教程

    在本教程中,我们将深入探讨Spring Security 3的配置和使用实例,帮助你理解和掌握这个框架的核心概念。 首先,Spring Security 3的配置主要涉及以下几个方面: 1. **核心组件配置**:这包括`http`元素,它定义了...

    SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    SpringBoot+SpringSecurity处理Ajax登录请求问题 ...使用SpringBoot+SpringSecurity处理Ajax登录请求问题需要我们了解SpringBoot、SpringSecurity、MyBatis等技术框架,并掌握相关的配置和实现细节。

    SpringBoot+SpringSecurity+WebSocket

    3. 集成SpringSecurity:配置SpringSecurity的WebSecurityConfigurerAdapter,设置登录认证、权限控制等规则。确保WebSocket连接也需要经过SpringSecurity的认证。 4. 客户端支持:在前端JavaScript中使用WebSocket ...

    SpringSecurity 3配置文件

    在本文中,我们将深入探讨Spring Security 3的配置文件,以及如何理解和使用这些配置来增强应用的安全性。 首先,Spring Security的配置通常位于一个或多个XML文件中,这些文件通过`&lt;beans&gt;`标签定义了安全相关的...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    整合Spring Security到Spring Cloud Gateway的过程通常包括以下步骤: 1. **配置Redis**:由于微服务架构中多个服务可能需要共享用户信息,因此使用Redis作为集中式的session存储是常见的选择。这样,用户在任一...

    SpringSecurity学习总结源代码

    SpringSecurity是Java开发中用于构建安全Web应用的框架,它提供了强大的身份验证、...在学习过程中,分析提供的源代码和示例将有助于深入理解SpringSecurity的工作原理,并能帮助你在实际项目中有效地应用这些知识。

    spring-security多登录页面配置

    ### Spring Security 多登录页面配置详解 在许多大型企业级应用中,为了更好地实现权限管理和用户体验,往往会采用多个登录页面的方式来进行用户身份验证。这种方式能够有效地将不同类型的用户(如前台用户、后台...

    spring security 2 配置说明

    标题与描述均提到了“Spring Security 2 配置说明”,这表明文章旨在阐述Spring Security 2版本的配置细节,尤其是对于那些希望深入了解并正确应用该框架的安全特性开发者们。以下将基于给定的部分内容,深入解析...

Global site tag (gtag.js) - Google Analytics