Spring Boot with Web Form, and MongoDB Authentication

Spring Boot has some some excellent Getting Started exercises.  Securing a web application is one of them.  I used this as the basis for my first web login form.  Nice and simple.

Screen Shot 2016-07-02 at 14.32.15

Create a new project in Intellij.

Screen Shot 2016-07-02 at 14.32.22

Make sure you select Gradle Project.

Screen Shot 2016-07-02 at 14.32.34

Make sure you have Auto Import ticked.

This will make Gradle pick up changes automatically.

Screen Shot 2016-07-02 at 14.33.06

Your project should be structured like this.

MongoDB Integration

I have been getting up to speed with MongoDB, and wanted to save user credentials in Mongo.  It took a while to get something working, and involved using a couple of tutorials to get things started.

I thought it might be useful to explain what I modified to get MongoDB integration working.  I started off by following the Securing a web application tutorial.  This allowed me to get a basic home -> login -> logged in functionality.

If you want to get the completed code, you can clone this git repo.

I made the following changes:

I added the following dependencies to build.gradle:

Screen Shot 2016-07-02 at 16.26.50

compile group: ‘javax.persistence’, name: ‘persistence-api’, version: ‘1.0’

_These _were mongoDb, and javax.persistence for my auto-generated Id (for my account class).

I created an Account POJO, which holds my user login information:

package com.chocksaway.entity;

import javax.persistence.Id;

public class Account {

    private String id;
    private String username;
    private String password;

    public Account(){}

    public Account(String username, String password) {
        this.username = username;
        this.password = password;
    public String getId() {
        return id;
    public void setId(String id) {
        this.id = id;
    public String getUsername() {
        return username;
    public void setUsername(String username) {
        this.username = username;
    public String getPassword() {
        return password;
    public void setPassword(String password) {
        this.password = password;

The @Id tag declares the auto-generated Id.

The AccountRepository is a wrapper round MongoDB (CRUD) functionality:

package com.chocksaway.repository;

import com.chocksaway.entity.Account;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface AccountRepository extends MongoRepository<Account, String> {

    public Account findByUsername(String username);


<strong>Very simple.</strong>

The main change is in WebSecurityConfig:

public class WebSecurityConfig extends GlobalAuthenticationConfigurerAdapter {
    AccountRepository accountRepository;

    UserDetailsService userDetailsService() {
        return new UserDetailsService() {

            public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
                Account account = accountRepository.findByUsername(username);
                if (account != null) {
                    return new User(account.getUsername(), account.getPassword(), true, true, true, true,
                } else {
                    throw new UsernameNotFoundException("could not find the user '"
                            + username + "'");


    public void init(AuthenticationManagerBuilder auth) throws Exception {

**A UserDetailsService _has been implemented. The _username and password have been passed to “accountRepository.findByUsername.” **

Nice and simple, but it took a while to understand how MongoDB integrated with Spring Boot :O)

**The last change was adding a command line CommandLineRunner, which allowed me to add a username, and password to MongoDB on application start: **

    CommandLineRunner init(final AccountRepository accountRepository) {
        return new CommandLineRunner() {
            public void run(String... arg0) throws Exception {
                accountRepository.save(new Account("username", "password"));

When you run the application, you can see that a these values have been saved in MongoDB (using RoboMongo):

Screen Shot 2016-07-02 at 16.26.50

Update - i’ve added some simple web forms, which allow you to log in as our user.



:: Spring Boot :: (v1.4.1.RELEASE)

Look for:

Tomcat started on port(s): 8080    

Point your web browser at:


You will see a web form:

Screen Shot 2016-07-02 at 16.26.50

Click login

Screen Shot 2016-07-02 at 16.26.50

You’ve logged in successfully

Screen Shot 2016-07-02 at 16.26.50
Click “here” to see a greeting

Simple authentication with Spring Boot, and MongoDB :O)

The completed code is here.

Author | Miles Davenport

Career programmer, who designs, assembles, fixes, and supports customers, software and systems.