The code example is available from Github in the Spring-MVC-Login-Logout directory. It is derived from the Spring MVC with annotations example.
Customized Authentication Provider
In order to implement our own way of accepting user login requests, we need to implement an authentication provider. The following lets users in if their id is identical to their passwords:public class MyAuthenticationProvider implements AuthenticationProvider { private static final List<GrantedAuthority> AUTHORITIES = new ArrayList<GrantedAuthority>(); static { AUTHORITIES.add(new SimpleGrantedAuthority("ROLE_USER")); AUTHORITIES.add(new SimpleGrantedAuthority("ROLE_ANONYMOUS")); } @Override public Authentication authenticate(Authentication auth) throws AuthenticationException { if (auth.getName().equals(auth.getCredentials())) { return new UsernamePasswordAuthenticationToken(auth.getName(), auth.getCredentials(), AUTHORITIES); } throw new BadCredentialsException("Bad Credentials"); } @Override public boolean supports(Class<?> authentication) { if ( authentication == null ) return false; return Authentication.class.isAssignableFrom(authentication); } }
Security.xml
We need to create a security.xml file:<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <http> <intercept-url pattern="/*" access="ROLE_ANONYMOUS"/> <form-login default-target-url="/" always-use-default-target="true" /> <anonymous /> <logout /> </http> <authentication-manager alias="authenticationManager"> <authentication-provider ref="myAuthenticationProvider" /> </authentication-manager> <beans:bean id="myAuthenticationProvider" class="com.jverstry.LoginLogout.Authentication.MyAuthenticationProvider" /> </beans:beans>
Main Page
We implement a main page displaying the name of the currently logged in user, together with login and logout links:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Welcome To MVC Customized Login Logout!!!</title> </head> <body> <h1>Spring MVC Customized Login Logout !!!</h1> Who is currently logged in? <c:out value="${CurrPrincipal}" /> !<br /> <a href="<c:url value='/spring_security_login'/>">Login</a> <a href="<c:url value='/j_spring_security_logout'/>">Logout</a> </body> </html>
Controller
We need to provide the currently logged in user name to the view:@Controller public class MyController { @RequestMapping(value = "/") public String home(Model model) { model.addAttribute("CurrPrincipal", SecurityContextHolder.getContext() .getAuthentication().getName()); return "index"; } }
Running The Example
Once compiled, one can start the example by browsing: http://localhost:9292/spring-mvc-login-logout/. It will display the following:Log in using the same id and password:
The application returns to the main and displays:
More Spring related posts here.
Hi ,
ReplyDeleteGreat blog! Is there an email address I can contact you in private?
Yes, you can use tshikatshikaaa@gmail.com !!!
Deletecan you show us the project tree view ?? thanks before, this is great...
ReplyDelete:)
The project can be downloaded from the link provided at the begining of the post...
DeleteYour domain is a magnificent source of ample data! Do you mind if I pingback a couple of of your articles on my personal website?
ReplyDeleteI am OK if you put a link to the original article.
DeleteGreat Site - very helpful! Thanks for you time an effort.
ReplyDelete