Today we will learn about Spring Security Login Example. Before reading this post, please go through my previous post at “Introduction to Spring 4 Security” to get some basics.

Spring Security Login Logout Example

In this post, we are going to develop Spring 4 MVC Security Web Application to provide Login and Logout features by using In-Memory option. This example uses Spring Java Config with Spring Annotations, that means without using web.xml and Spring XML Configuration(Old Style).

If you are not familiar with Spring 3.x Security Module, please go through the following posts first to taste the Spring Security Recipe.

  1. Spring MVC Security Example using in-memory, UserDetailsService and JDBC Authentication
  2. Spring Security in Servlet Web Application using DAO, JDBC, In-Memory authentication

Spring 4 Security Module supports the following options to store and manage User Credentials:

  1. In-Memory Store
  2. Relations Databases(RDBMS)
  3. No SQL Data Stores
  4. LDAP

We will use “In-Memory Store” option in this example. We will discuss other options in my coming posts.

We are going to use Spring 4.0.2.RELEASE, Spring STS 3.7 Suite IDE, Spring TC Server 3.1 with Java 1.8 and Maven build tool to develop this example.

Spring Security Login Logout Example

We are going to develop a Login and Logout logic using Spring 4 Security Features. The main aim of this application is that developing an application without using “web.xml” and without writing a single line of Spring XML Beans Configuration. That means we are going to use Spring Java Config feature with Spring Annotations.

We will develop this application with the following features:

  1. Welcome Page
  2. Login Page
  3. Home Page
  4. Logout Feature

Please use the following steps to develop and explore this Spring 4 Security Simple Login Example.

  • Create a “Simple Spring Web Maven” Project in Spring STS Suite with the following details

  • Update pom.xml with the following content

If you are not aware of “<failOnMissingWebXml>” flag, please read at the end of this post to get a good understanding of this element usage.

  • First, Develop Login Controller by using Spring’s @Controller annotation.

Code Explanation:-
We have defined three methods in “LoginController” to handle three different kinds of Client Requests

  1. welcomePage() will handle all client requests which are using “/” URI.
  2. homePage() will handle all client requests which are using “/homePage” URI.
  3. loginPage() will handle all client requests which are using “/loginPage” URI.
  4. In loginPage(), we have take care of handling error and logout messages.
  • Then develop a class “LoginSecurityConfig” to provide Login and Logout Security Features using Spring 4 Security API.

Code Explanation:-
We have defined two methods in “LoginSecurityConfig” to store and manage User Credentials and take care of Login and Logout Security features.

    1. @EnableWebSecurity Annotation is used to enable web security in any web application.
    2. @EnableWebMVCSecurity Annotation is used to enable web security in Spring MVC based web application.

@EnableWebSecurity = @EnableWebMVCSecurity + Extra features.
That’s why @EnableWebMVCSecurity Annotation is deprecated in Spring 4.x Framework.

    1. “LoginSecurityConfig” class or any class which is designated to configure Spring Security, should extend “WebSecurityConfigurerAdapter” class or implement related interface.
    2. configureGlobal() method is used to store and mange User Credentials.
    3. In configureGlobal() method, we can use authorities() method to define our application Roles like “ROLE_USER”. We can also use roles() method for same purpose.
    4. Difference between authorities() and roles() methods:
    5. authorities() needs a complete role name like “ROLE_USER”
      roles() needs a role name like “USER”. It will automatically add “ROLE_” value to this “USER” role name.NOTE:- We will develop another example to demonstrate Roles like “USER”,”ADMIN” in my coming posts.
    6. Important method to take care of Login and Logout Security is configure(HttpSecurity http)
    7. The following code snipped is used to avoid unauthorized access to “/homePage”. If you try to access this page directly, we will redirected to “/loginPage” page automatically.

If we remove access(“hasRole(‘ROLE_USER’)”) method call, then we can access this page without login to our application.

  1. We have configured login and logout features using formLogin() and logout() methods.
  • Enable Spring MVC Configuration

Code Explanation:-
We use “LoginApplicationConfig” class to define Spring MVC View Resolvers to avoid writing “web.xml” file.

  1. @EnableWebMvc Annotation is used to enable Spring Web MVC Application Features in Spring Framework
  2. @Import Annotation is used to import Spring Security Configuration class into this class.
  3. @ComponentScan Annotation is used to do component scanning in the specified package. It is equal to “<context:component-scan>” in Spring XML Configuration.
  • Initialize Spring Security

“SpringSecurityInitializer” is used to register the DelegatingFilterProxy to use the springSecurityFilterChain. It avoids writing Filters configuration in web.xml file.

  • Initialize Spring MVC Application

“SpringMVCWebAppInitializer” class is used to initialize “DispatcherServlet” without web.xml file in a Annotation based configuration.


  1. When we access our application, by default SpringMVCWebAppInitializer’s getServletMappings() will allow to access root url: “/”. We can override to forward to a different URL.
  2. The Spring or Pivotal team is working this issue to avoid this much Java code by introduction an annotation. Please check this at
  • Develop welcomePage.jsp file

  • Develop loginPage.jsp file

  • Develop homepage.jsp file

  • Final Project Structure looks like this:
  • Run Spring Security MVC Login Logout Example

Run Spring Security MVC Login Logout Example

To run this Spring Web Application, we need any Web Container which supports Spring 4 and Java 8 Environments With Servlet 3.1.0 Container.

    • Deploy and Run on Spring TC Server in Spring STS Suite
    • It automatically access our application welcome page url as shown below.
    • Run Spring Security MVC Login Logout Example
    • click on “Login to JournalDEV” link to access login page.
    • security-login-inmemory-example3-450x231 (1)
    • Now, provide wrong login details and click on “Login” button.
    • security-login-inmemory-example3-450x231 (1)

Here we can observe this error message: “Invalid Credentials provided.”

    • Now, provide correct login details configured in “LoginSecurityConfig” class.
    • security-login-inmemory-example3-450x231 (1)

After successful login to our application, we can see our Application Homepage with the “Logout” link.

    • click on “Logout” link to logout from Application.
    • security-login-inmemory-example3-450x231 (1)

Here we can observe that we are Logged out from our application successfully and redirected to Login page again.

We can observe some Log out successful message in this Login page.

If we observe this example, we are not using the web.xml file right. As it is a Web Application, Maven searches for web.xml file and raises some errors if it does not find in the application. That’s to avoid Maven related issues, we need to configure “<failOnMissingWebXml>” flag in pom.xml file.

That’s it all about Spring 4 Security Module Simple Example. We will develop some more real-time useful examples in my coming posts like Managing Roles, Remember-Me Feature, WebSocket Security, and more.

Please drop me a comment if you like my post or have any issues/suggestions.

By admin

Leave a Reply

%d bloggers like this: