Affichage des articles dont le libellé est Spring security. Afficher tous les articles
Affichage des articles dont le libellé est Spring security. Afficher tous les articles

mardi 15 avril 2014

Spring security authentication

In this tutorial we'll learn how to secure a web application using spring security with users stored on a database

P.S In this example, we are using MySQL database and deploy to Tomcat 7 web container.

1. Database Script
script to create the user table on the database.
CREATE TABLE `user` 
  ( 
     `userid`   BIGINT(20) UNSIGNED NOT NULL auto_increment,
     `login`    VARCHAR(50) NOT NULL,
     `password` VARCHAR(50) NOT NULL,
     `role`     VARCHAR(50) NOT NULL, 

     `enabled`     TINYINT(1) NOT NULL, 
     PRIMARY KEY (`userid`)
  ) engine=innodb auto_increment=17 DEFAULT charset=utf8;
INSERT INTO `user`(`userid`, `login`, `password`, `role`, 
`enabled`)

VALUES      (1, 'raouf', 'raouf', 'user', 1);


2. Project structure












3. Datasource configuration : 
application-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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-2.5.xsd">
   <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
      <property name="user" value="root" />
      <property name="driverClass" value="org.gjt.mm.mysql.Driver"/>
      <property name="jdbcUrl" value="jdbc:mysql://localhost/tutorial" />
      <property name="password" value="root" />
   </bean>
</beans>
4. Security configuration : 
we'll secure our web application so only logged users can access on our resources.
spring-security.xml
<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" 
   xmlns:security="http://www.springframework.org/schema/security"
   xmlns:sec="http://www.springframework.org/schema/security"
   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.xsd">
   <sec:http auto-config="true" use-expressions="true">
      <sec:intercept-url pattern="/login.html" access="permitAll" />
      <sec:intercept-url pattern="/*" access="hasRole('user')"/>
      <sec:session-management invalid-session-url="/login.html" />
      <sec:form-login login-page="/login.html"/>
      <sec:logout
         invalidate-session="true"
         delete-cookies="JSESSIONID,SPRING_SECURITY_REMEMBER_ME_COOKIE"
         logout-success-url="/login.html"></sec:logout>
   </sec:http>
   <authentication-manager>
      <authentication-provider>
         <jdbc-user-service data-source-ref="dataSource"
            users-by-username-query="
            select `login` as username, `password`, `enabled` 
            from `user` where login=?" 
            authorities-by-username-query="
            select `login` as username, `role` as authority from `user` where login =?" 
            />
      </authentication-provider>
   </authentication-manager>
</beans:beans>
5. Web Config :
here the code of the web config file
web.xml




6. Login page :
here the code of the login page
login.html
<!DOCTYPE html>
<html>
   <head>
      <meta charset="ISO-8859-1">
      <title>Login page</title>
   </head>
   <body>
      <h1>Authentication</h1>
      <br />
      <form name="login-form" action="j_spring_security_check" method="post">
         <input name="j_username" type="text" />
         <input name="j_password" type="password" />
         <input type="submit" name="submit" value="Connection" />
      </form>
   </body>
</html>
6. Welcome page :
here the code of the welcome page with the logout link
index.html
<html>
   <head>
      <title>Welcome</title>
   </head>
   <body>
      <h1>Welcome</h1>
      <a href="j_spring_security_logout">Logout</a>
   </body>
</html>