# 
        SPRING Security : Secure Web Application
    
This tutorial explains to you how you can secure a Web Application with Spring 5.
In order to secure a Web Application using Spring Security 5, you need a Web Application first. My demo will start from my Spring MVC Web Application I have created before this article. You can see it here .
In order to secure the application above, I will add the following the pom.xml file:
 
    
The version of the artifact could be a more recent one, but I tested my application using 5.0.4.RELEASE.
Now you can add the security classes :
package com.example.config;
 
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
 
public class WebSecurityInitializer extends AbstractSecurityWebApplicationInitializer {
 
    //public WebSecurityInitializer() {
    //  super(WebSecurityConfig.class);
    //}
}package com.example.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
    String encoded = passwordEncoder.encode("pass1");
    System.out.println("encoded="+encoded);
    auth.inMemoryAuthentication().passwordEncoder(NoOpPasswordEncoder.getInstance())
            .withUser("user").password("u").authorities("USER")
            .and()
            .withUser("admin").password("a").authorities("USER","ADMIN");
  }
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers("/").permitAll()
            .antMatchers("/myLogout").permitAll()
            .antMatchers("/shared/**").permitAll()
            .antMatchers("/no-access/*").denyAll()
            .antMatchers("/secured/**").hasAuthority("USER")
            .antMatchers("/admin-content/**").hasAuthority("ADMIN")
            .and()
            .formLogin() //Default login
            .and()
            .logout().logoutSuccessUrl("/myLogout").permitAll()
            .and().csrf().disable();
  }
}Add WebSecurityConfig.class into the MyAppStarter class :
package com.example.starter;
 
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import com.example.config.WebConfig;
import com.example.config.WebSecurityConfig;
public class MyAppStarter extends AbstractAnnotationConfigDispatcherServletInitializer{
 
    // Load database and spring security configurations
    @Override
    protected Class<!--?-->[] getRootConfigClasses() {
        return new Class[] { WebSecurityConfig.class};
    }
 
    // Load spring web configuration
    @Override
    protected Class<!--?-->[] getServletConfigClasses() {
        return new Class[] {WebConfig.class};
    }
 
    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }
     
}In addition to the start non-secured application I use an index.jsp and myLogout.jsp with the
following definitions:
 
    
 
    
When you run the application, you will see the following index page:
 
    
When you click on "Logout" button you will see the logout page, and you will be logged out automatically:
 
    
When you click on a secured link you will the the default login page:
 
    
If you are logged in, you can access a secured page:
 
    
In my case, you cannot access the Page0 and for this reason you will see the following screen:
 
    
 
                                