This post walks you through the process of creating a Registration and Login example with Spring MVC, Spring Security, Spring Data JPA, XML Configuration, Maven, JSP and MySQL.

If you are new to Spring MVC or Spring Data JPA, it would be best to work your way through below before starting this example:
- Spring MVC Hello World Example with XML Configuration, Maven and JSP 
- JPA Many-To-Many Relationship Mapping Example with Spring Boot, Maven and MySQL
If you don't want to deal with MySQL or XML Configurations, try:
Registration and Login Example with Spring Security, Spring Data JPA, Spring Boot

What you'll build

Log in

Log out

Register account

Welcome

What you'll need

  • JDK 1.8 or later
  • Maven 3 or later
  • MySQL Server 5.6 or later

Stack

  • Spring MVC
  • Spring Security
  • Spring Data JPA
  • Maven
  • JSP
  • MySQL

Project structure

├── src
│   └── main
│       ├── java
│       │   └── com
│       │       └── hellokoding
│       │           └── account
│       │               ├── model
│       │               │   ├── Role.java
│       │               │   └── User.java
│       │               ├── repository
│       │               │   ├── RoleRepository.java
│       │               │   └── UserRepository.java
│       │               ├── service
│       │               │   ├── SecurityServiceImpl.java
│       │               │   ├── SecurityService.java
│       │               │   ├── UserDetailsServiceImpl.java
│       │               │   ├── UserServiceImpl.java
│       │               │   └── UserService.java
│       │               ├── validator
│       │               │   └── UserValidator.java
│       │               └── web
│       │                   └── UserController.java
│       ├── resources
│       │   ├── application.properties
│       │   ├── db.sql
│       │   ├── logback.xml
│       │   └── validation.properties
│       └── webapp
│           ├── resources
│           │   ├── css
│           │   │   ├── bootstrap.min.css
│           │   │   └── common.css
│           │   └── js
│           │       └── bootstrap.min.js
│           └── WEB-INF
│               ├── views
│               │   ├── login.jsp
│               │   ├── registration.jsp
│               │   └── welcome.jsp
│               ├── appconfig-data.xml
│               ├── appconfig-mvc.xml
│               ├── appconfig-root.xml
│               ├── appconfig-security.xml
│               └── web.xml
└── pom.xml

Project dependencies

Database

Define JPA Entities

JPA Entity is defined with @Entity annotation, represent a table in your database.

@Table maps the entity with the table. If no @Table is defined, the default value is used: the class name of the entity.

@Id declares the identifier property of the entity.

@ManyToMany defines a many-to-many relationship between 2 entities. @JoinColumn indicates the entity is the owner of the relationship: the corresponding table has a column with a foreign key to the referenced table. mappedBy indicates the entity is the inverse of the relationship.

Spring Data JPA Repositories

Spring Data JPA contains some built-in Repository implemented some common functions to work with database: findOne, findAll, save,...

Spring Security's UserDetailsService

To implement login/authentication with Spring Security, we need to implement org.springframework.security.core.userdetails.UserDetailsService interface

Authorization is implemented via XML file configuration appconfig-security.xml

Security Service

We create SecurityService to provide current loggedin user and auto login user after resgistering an account.

User Service

Provide service for registering account

Spring Validator

To provide input-data validation for /registration controller with Spring Validator, we implement org.springframework.validation.Validator. Error codes, e.g. Size.userForm.username, are defined by validation.properties

Controllers

/login POST controller is provided by Spring Security

Properties

XML Configuration

Spring MVC Config
Spring Data JPA Config
Spring Security Config

Run

You can run the application using mvn jetty:run and visit to http://localhost:8080

Source code

[email protected]:hellokoding/registration-login-spring-xml-maven-jsp-mysql.git
https://github.com/hellokoding/registration-login-spring-xml-maven-jsp-mysql

If you don't want to deal with MySQL or XML Configurations, try:
Registration and Login Example with Spring Security, Spring Data JPA, Spring Boot