---
schema_version: "1"
id: c2d1ab70931b405fdbd0d201ef19c710b7022278b792844fda659ab14c69bfb8
title: Spring Module 2.2
collection: mulesoft
version: current
locale: en-us
portal_url: https://docs.salesforce.com/mulesoft/current/en-us/spring-module/latest/index.md
canonical_url: https://docs.mulesoft.com/spring-module/latest/
source_site: docs.mulesoft.com
content_type: documentation
content_hash: e5b2e0390eeac969b0c1ea0691df519ebb399328cd8d74fb1622c43c471b3081
description: MuleSoft Documentation Site
release: "2.2"
latest: true
---
---
product: Spring Module
version: 2.2
is-latest-version: true
---

# Spring Module 2.2

> For the full documentation index, see: https://docs.mulesoft.com/llms.txt

Spring Module enables Mule apps to use the Spring framework.

Release Notes:
[Spring Module Release Notes](https://docs.mulesoft.com/release-notes/connector/spring-module-release-notes)  
Exchange: [Spring Module](https://www.mulesoft.com/exchange/org.mule.modules/mule-spring-module/)

## Add Spring Module to Your Project

In **Mule Palette**, search for "Spring" and drag the Authorization Filter operation to the Studio
canvas.

Starting with version 2.2.0, the Spring libraries that the module needs are defined at the
configuration level instead of the module level. When you add the module to your project, Studio
doesn’t load the Spring libraries automatically, and each Spring Module configuration sets up its
own libraries. Existing apps that use earlier versions of the module continue to work.

> [!IMPORTANT] Spring Module 2.2.0 and later supports Spring Framework 7 and Spring Security 7
> through the `spring:v7-config` element. The `spring:config` element, which uses Spring 6, is
> deprecated. To use Spring 7, create a `spring:v7-config` configuration and complete the library
> setup in [Set Up Spring 7 Libraries in the pom.xml File](https://docs.mulesoft.com/spring-module/latest/spring-xml-maven#spring7-libraries).

## Configure Spring Module

1.  Add the following configuration:

    ```xml
    <?xml version="1.0" encoding="UTF-8"?>

    <mule xmlns:spring="http://www.mulesoft.org/schema/mule/spring"
          xmlns="http://www.mulesoft.org/schema/mule/core"
          xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core
            http://www.mulesoft.org/schema/mule/core/current/mule.xsd
            http://www.mulesoft.org/schema/mule/spring
            http://www.mulesoft.org/schema/mule/spring/current/mule-spring.xsd">

        <spring:v7-config name="springConfig" files="beans.xml" />

    </mule>
    ```

    > [!NOTE] To use Spring 6, use `<spring:config>` instead of `<spring:v7-config>`. You can’t use
    > both elements in the same app.

2.  Put the `beans.xml` file in `src/main/resources`.

    The Spring configuration must be valid. Here is an example beans.xml file:

    ```xml
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:jdbc="http://www.springframework.org/schema/jdbc"

        xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
          http://www.springframework.org/schema/jdbc
          http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-4.2.xsd
          http://www.springframework.org/schema/security
          http://www.springframework.org/schema/security/spring-security-4.2.xsd">

        <jdbc:embedded-database id="dataSource" type="DERBY">
            <jdbc:script location="classpath:db/sql/create-db.sql" />
            <jdbc:script location="classpath:db/sql/insert-data.sql" />
        </jdbc:embedded-database>

    </beans>
    ```

You must export the beans files used with the Spring module for your application to start. See
[How to Export Resources](https://docs.mulesoft.com/mule-runtime/latest/how-to-export-resources).

If you are using Anypoint Studio 7.x, you don’t need to manually update the `mule-artifact.json`
file.

Because Mule also needs a descriptor where the Spring beans are declared, so the embedded packager
within Studio automatically generates one with all the resources it picks up from the project.
However, if you choose to declare the resources you need to export, then Studio packages only those
resources.

The following example enables you to declare your `beans.xml` file in `mule-artifact.json`:

```example
{
    "name": "MyApp",
    "minMuleVersion": "4.2.1",
    "classLoaderModelLoaderDescriptor": {
        "id": "mule",
        "attributes": {
            "exportedResources": [
                "/org/mule/myapp/beans.xml"
            ]
        }
    }
  }
}
```

## Spring Objects in Mule Components

You can use Spring objects in Mule configuration components (for instance, to point to the Derby
data source created with Spring beans) as follows:

```xml
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:db="http://www.mulesoft.org/schema/mule/db"
      xmlns:spring="http://www.mulesoft.org/schema/mule/spring"
      xmlns="http://www.mulesoft.org/schema/mule/core"
      xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core
        http://www.mulesoft.org/schema/mule/core/current/mule.xsd
        http://www.mulesoft.org/schema/mule/spring
        http://www.mulesoft.org/schema/mule/spring/current/mule-spring.xsd
        http://www.mulesoft.org/schema/mule/db
        http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd">

    <spring:config name="springConfig" files="beans.xml" />

    <db:config name="derbyConfig" doc:name="Database Config"  >
        <db:derby-connection database="datasource" create="true" />
    </db:config>
</mule>
```

## Spring Properties Placeholders

You cannot use the properties defined by Spring properties placeholders within your Mule app
configuration; you can use them only in Spring configuration files. However, you can use properties
defined in Mule through `<configuration-properties/>` within Spring configuration files.

## Limitations of Spring Objects

To use Spring module, consider implementation and injection limits:

- Spring objects cannot implement Mule API lifecycle methods.

- Spring objects cannot be injected with Mule API services. The only service that can be used is the
  `org.mule.runtime.api.artifact.Registry`, which can be used to access any other service within the
  Mule API. This can be accomplished by using `@PostConstruct` over a method to initialize the
  object and retrieve the Mule API service.

## Use Spring Security as a Security Manager

> [!IMPORTANT] If you use Spring Framework 5.x with plain text passwords, you must prefix the
> password value with `{noop}`. For example, the password `admin` would be `{noop}admin` instead.

The Spring module supports the use of Spring security as a security manager in Mule apps. You must
define an authentication manager in the Spring configuration file:

```xml
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:jdbc="http://www.springframework.org/schema/jdbc"
  xmlns:ss="http://www.springframework.org/schema/security"

  xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
      http://www.springframework.org/schema/jdbc
      http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.2.xsd
      http://www.springframework.org/schema/security
      http://www.springframework.org/schema/security/spring-security-4.2.xsd">

  <ss:authentication-manager alias="authenticationManager">
    <ss:authentication-provider>
      <ss:user-service id="userService">
        <ss:user name="admin" password="admin" authorities="ROLE_ADMIN" />
        <ss:user name="joe" password="secret" authorities="ROLE_ADMIN" />
        <ss:user name="anon" password="anon" authorities="ROLE_ANON" />
        <ss:user name="user" password="password" authorities="ROLE_ANON" />
        <ss:user name="ross" password="ross" authorities="ROLE_ANON" />
        <ss:user name="marie" password="marie" authorities="ROLE_ANON" />
      </ss:user-service>
    </ss:authentication-provider>
  </ss:authentication-manager>

</beans>
```

You can define a security manager within a Mule app that makes use of the Spring authentication
manager like this:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<mule
  xmlns:spring="http://www.mulesoft.org/schema/mule/spring"
  xmlns="http://www.mulesoft.org/schema/mule/core"
  xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-current.xsd
    http://www.mulesoft.org/schema/mule/core
    http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/spring
    http://www.mulesoft.org/schema/mule/spring/current/mule-spring.xsd">

  <spring:config name="springConfig" files="beans.xml" />

  <spring:security-manager>
    <spring:delegate-security-provider
      name="memory-provider"
      delegate-ref="authenticationManager" />
  </spring:security-manager>

</mule>
```

## Validate Authentication with the Spring Authorization Filter

The Spring module adds support for a filter that fails if authentication cannot be validated using
the Mule Security Manager:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<mule
  xmlns:http="http://www.mulesoft.org/schema/mule/http"
  xmlns:db="http://www.mulesoft.org/schema/mule/db"
  xmlns:spring="http://www.mulesoft.org/schema/mule/spring"
  xmlns="http://www.mulesoft.org/schema/mule/core"
  xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-current.xsd
    http://www.mulesoft.org/schema/mule/core
    http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/spring
    http://www.mulesoft.org/schema/mule/spring/current/mule-spring.xsd
    http://www.mulesoft.org/schema/mule/db
    http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd
    http://www.mulesoft.org/schema/mule/http
    http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">

  <spring:config name="springConfig" files="beans.xml" />

  <spring:security-manager>
    <spring:delegate-security-provider
      name="memory-provider"
      delegate-ref="authenticationManager" />
  </spring:security-manager>

  <http:listener-config
    name="HTTP_Listener_config"
     doc:name="HTTP Listener config"  >
      <http:listener-connection
        host="0.0.0.0"
        port="9090" />
  </http:listener-config>

  <flow name="spring-exampleFlow"  >
    <http:listener
      config-ref="HTTP_Listener_config"
      path="/"
      doc:name="Listener"  />
    <http:basic-security-filter
      realm="mule" />
      <spring:authorization-filter
        requiredAuthorities="ROLE_ADMIN" />
  </flow>
</mule>
```

The `http:basic-security-filter` tries to authenticate the user using basic authentication. If the
request is authenticated successfully, Mule retrieves the username and uses it in the Spring
`authorization-filter` to search for that user and to try to authorize the request against the
authority ROLE\_ADMIN.

## See Also

- [Property Placeholders in Mule Apps](https://docs.mulesoft.com/mule-runtime/latest/configuring-properties)

- [Migrate the Spring Module to Mule 4](https://docs.mulesoft.com/mule-runtime/latest/)

- [Salesforce Help](https://help.salesforce.com)
