Dziś na tapecie: zabezpieczanie aplikacji. Umożliwienie logowania, uniemożliwienie wejścia na konkretne strony niezalogowanym użytkownikom. Do tego celu posłuży mi Spring Security.
Spring Security to framework umożliwiający w łatwy sposób dodanie do aplikacji funkcji autoryzowania użytkowników. Właściwie niemal cała konfiguracja odbywa się za pomocą plików XML. Pierwszym krokiem jest dodanie biblioteki do projektu - ponieważ używam Mavena, wystarczy dodać kilka linii do pliku pom.xml i przebudować projekt:
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
Następnie dodajemy plik spring-security.xml, w którym znajdują się ustawienia zabezpieczeń:
<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-4.2.xsd">
<http auto-config="true">
<intercept-url pattern="/" access="permitAll" />
<intercept-url pattern="/index.jsp" access="permitAll" />
<intercept-url pattern="/register" access="permitAll" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="ania" password="1qaz" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
Taka konfiguracja zezwala wszystkim użytkownikom (zalogowanym i niezalogowanym) na wejście na strony: główną ("/"), index.jsp i /register. Pozostałe strony są dostępne tylko po zalogowaniu się.
Logowanie z kolei obecnie jest możliwe tylko dla użytkownika ania, za pomocą hasła 1qaz. Oczywiście jest to rozwiązanie tymczasowe - docelowo użytkownicy będą przechowywani w bazie, nie w pliku. :)
Aby plik spring-security.xml był "widziany" przez aplikację, konieczne jest dopisanie kilku linii w pliku web.xml:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- Loads Spring Security config file -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-security.xml
</param-value>
</context-param>
<!-- Spring Security -->
<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>
Żeby to wszystko zadziałało, trzeba jeszcze włączyć obsługę sesji na stronach, które mają być dostępne tylko po zalogowaniu, poprzez dopisanie na początku pliku linii:
<%@page session="true"%>
Tak wyposażeni i skonfigurowani możemy teraz podbijać świat.
Kolejne kroki, które mnie czekają:
- zmiana domyślnej formatki logowania (wygenerowanej przez Spring Security) na własną (którą chwaliłam się o tu),
- dodanie bazy danych i przechowywanie w niej danych użytkowników.
-------
Źródła, z których korzystałam:
Lekcje o Spring Security na KobietyDoKodu: 1, 2, 3
Tutorial na mkyong.com
Kilka słów z dokumentacji Spring Security na temat definiowania dostępu do zasobów
Brak komentarzy:
Prześlij komentarz