Spring Security memungkinkan pengembang untuk mengintegrasikan fitur keamanan pada aplikas Java Web dengan cara melakukan hijacking pada HTTP request menggunakan Filter yang melakukan pengecekan keamanan.
Pada tutorial ini saya akan menunjukkan bagaimana cara mengintegrasikan Spring Security dengan Spring MVC web untuk mengamankan akses ke sebuah URL. Jadi nanti kalau mau melihat konten dari sebuah halaman kita harus memasukkan username dan password dengan benar serta user tersebut memiliki hak akes untuk mengaksesnya.
Saya menggunakan IDE Netbeans, framework Spring MVC menggunakan bawaan dari Netbeans sedangkan Spring Security dapat didownload disini. Saya menggunakan versi 3.1.3
Pertama kita buat sebuah Controller yang akan menampilkan sebuah isi halaman dari welcome.jsp yang diakses dengan url “/user“. Nantinya url ini yang akan kita amankan menggunakan Spring Security
Saya menggunakan parameter Principal pada methodnya untuk mendapatkan nama user yang sedang login pada aplikasi.
file : SecurityController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com.agung.controller; import java.security.Principal; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * * @author Agung Setiawan */ @Controller @RequestMapping("user") public class SecurityController { @RequestMapping(method = RequestMethod.GET) public String welcome(Model model, Principal principal){ model.addAttribute("user", principal.getName()); return "welcome"; } } |
Dan berikut adalah file welcome.jsp yang akan ditampilkan isinya
file : welcome.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Hello User</h1> <p>Welcome ${user} to The System</p> <a href="<c:url value="j_spring_security_logout" />">Logout</a> </body> </html> |
Selanjutnya adalah konfigurasi standar dari Spring Mvc. Saya rasa kita sudah sampai bosen dan hapal membuatnya hahaa 😀
file : dispatcher-servlet.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" > <context:component-scan base-package="com.agung.controller"/> <mvc:annotation-driven/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> </beans> |
Buat sebuah file konfigurasi lagi. File konfigurasi ini digunakan untuk keamanan aplikasi kita. Hanya user dengan role “ROLE_USER” yang bisa mengakses url “/user“. Kita juga melakukan konfigurasi manual user dengan nama “agung” dan password “123456” yang bisa mengaksesnya. Nantinya kita bisa mengambilnya dari sebuah basisdata, namum untuk kesederhanaan tutorial kita buat statis saja hehee.
file : spring-security.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<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 auto-config="true"> <intercept-url pattern="/user*" access="ROLE_USER" /> <logout logout-success-url="/user" /> </http> <authentication-manager> <authentication-provider> <user-service> <user name="agung" password="123456" authorities="ROLE_USER" /> </user-service> </authentication-provider> </authentication-manager> </beans:beans> |
Nahh..
Terakhir adalah mengintegrasikan Spring Security dengan aplikasi web kita. Pada web.xml kita tambahkan Filter “DelegatingFilterProxy” yang akan mengintercept request yang masuk. Selain itu spring-security.xml juga perlu kita load
file : web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml /WEB-INF/spring-security.xml </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy </filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> </web-app> |
Sip sudah selesai 😀
Tapi tunggu ada yang kurang gak?
Ada, yaitu kita belum membuat form login
Tenang, karena Spring akan otomatis membuatkan kita sebuah form login kalau kita tidak membuatnya secara manual hahaa enak thoo 😀
Sekarang Demo, coba akses url “http://localhost:8084/SpringSecurityBasic/user” maka kita akan diarahkan ke form login
Coba masukkan username atau password yang salah, Spring sudah menangninya 😀
Terkahir jika kita memasukkan username dan password dengan benar maka kita akan diarahkan kehalaman terakhir yag kita akses tadi yaitu “http://localhost:8084/SpringSecurityBasic/user” dan akan menampilkan isinya
Semoga bermanfaat dan membantu belajar Spring 😀
good job
tulisan yang bagu, saya tertarik untuk mencoba mengambil query di tabel lain yang berelasi dengan tabel user, dan ketika user sedang login data yang tampil berbeda dengan user lainnya. terima kasih