Spring Security - Maven



Spring Security is a modular framework similar to Spring framework. We've three major module of spring security as shown below:

  • Spring Security Core − Provides authentication and access control functionality. This module is required for all projects/modules of spring security.

  • Spring Security Web − Provides spring security support for web based project.

  • Spring Security Config − Provides spring security XML namespace and annotations.

For other APIs support like LDAP, OpenID, ACL, CAS and OAuth, spring security provides corresponding modules as following:

  • LDAP − Spring Security LDAP

  • OpenID − Spring Security OpenID

  • ACL − Spring Security ACL

  • CAS − Spring Security CAS

  • OAuth2 − Spring Security OAuth

Maven Modules

To start with Spring security and spring integration in maven, we can define properties with their version as shown below:

Properties

<properties>  
...
   <spring.security.version>5.3.4.RELEASE</spring.security.version>
   <spring.version>5.2.8.RELEASE</spring.version>
</properties>

Spring Security and Spring frameworks versions are independent and are on different release cycles so their compatible versions can be different.

Dependencies

Maven projects for Spring security follows spring-security-* naming and spring projects are like spring-*. For above discussed project, following is the list of maven dependencies:

  • Spring Security Core − spring-security-core

  • Spring Security Web − spring-security-web

  • Spring Security Config − spring-security-config

  • LDAP − spring-security-ldap

  • OpenID − spring-security-openid

  • ACL − spring-security-acl

  • CAS − spring-security-cas

  • OAuth2 − spring-security-oauth2

For Spring, we can use spring-webmvc project as a top level dependency and maven will resolve following relevant dependencies automatically.

  • Spring Core − spring-core

  • Spring Context − spring-context

  • Spring Beans − spring-beans

  • Spring AOP − spring-aop

  • Spring Expressions − spring-expression

  • Spring JCL − spring-jcl

  • Spring Web − spring-web

  • Spring WebMVC − spring-webmvc

Example - POM for Spring

Following is a sample POM.XML where we've use spring and spring security dependencies using maven.

<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>
   <groupId>com.tutorialspoint</groupId>
   <artifactId>SpringSecurityFormLogin</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>Spring Security Form Login</name>
   <description>A Sample Spring Security Form Login Project</description>
   <packaging>war</packaging>  
   <properties>  
      <maven.compiler.target>1.8</maven.compiler.target>  
      <maven.compiler.source>1.8</maven.compiler.source>  
      <spring.security.version>5.3.4.RELEASE</spring.security.version>
      <spring.version>5.2.8.RELEASE</spring.version>
   </properties>  
   <dependencies>  
      <dependency>  
         <groupId>org.springframework</groupId>  
         <artifactId>spring-webmvc</artifactId>  
         <version>${spring.version}</version>  
      </dependency>  
      <dependency>  
         <groupId>org.springframework.security</groupId>  
         <artifactId>spring-security-web</artifactId>  
         <version>${spring.security.version}</version>  
      </dependency>  
      <dependency>  
         <groupId>org.springframework.security</groupId>  
         <artifactId>spring-security-core</artifactId>  
         <version>${spring.security.version}</version>  
      </dependency>  
      <dependency>  
         <groupId>org.springframework.security</groupId>  
         <artifactId>spring-security-config</artifactId>  
         <version>${spring.security.version}</version>  
      </dependency>  
      <dependency>  
         <groupId>javax.servlet</groupId>  
         <artifactId>javax.servlet-api</artifactId>  
         <version>3.1.0</version>  
         <scope>provided</scope>  
      </dependency>  
      <dependency>  
         <groupId>javax.servlet</groupId>  
         <artifactId>jstl</artifactId>  
         <version>1.2</version>  
      </dependency>  
   </dependencies>  
   <build>  
      <plugins>  
         <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-war-plugin</artifactId>  
            <version>2.6</version>  
            <configuration>  
               <failOnMissingWebXml>false</failOnMissingWebXml>  
            </configuration>  
         </plugin>  
      </plugins>  
   </build>  
</project>

Spring Boot - Spring Security Integration

Spring Boot provides much simpler and easier integration with Spring Security using spring-boot-starter-security as a starter dependency. It will automatically resolve all the relevant dependencies.

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Example - POM for Spring Boot

Following is a sample POM.XML where we've used spring boot and spring security dependencies using maven.

<?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>3.3.1</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.tutorialspoint.security</groupId>
   <artifactId>formlogin</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>formlogin</name>
   <description>Demo project for Spring Boot</description>
   <url/>
   <licenses>
      <license/>
   </licenses>
   <developers>
      <developer/>
   </developers>
   <scm>
      <connection/>
      <developerConnection/>
      <tag/>
      <url/>
   </scm>
   <properties>
      <java.version>21</java.version>
   </properties>
   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-security</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
         <groupId>org.thymeleaf.extras</groupId>
         <artifactId>thymeleaf-extras-springsecurity6</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
         <scope>runtime</scope>
         <optional>true</optional>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>org.springframework.security</groupId>
         <artifactId>spring-security-test</artifactId>
         <scope>test</scope>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
</project>
Advertisements