Spring security — замечательный фреймворк, экономящий много времени и усилий разработчиков. Также это достаточно гибко, чтобы настроить и свести его к вашим потребностям.
Работать с JDBC и Spring Security довольно просто, и многие действия автоматизированы. Это было бы минимальной витриной.
Файл Gradle содержит такие зависимости, как база данных spring-security, spring-jdbc и h2.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
group 'com.gkatzioura'version '1.0-SNAPSHOT'buildscript { repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.RELEASE") }}apply plugin: 'java'apply plugin: 'idea'apply plugin: 'spring-boot'sourceCompatibility = 1.8repositories { mavenCentral()}dependencies { compile("org.springframework.boot:spring-boot-starter-web") compile("org.thymeleaf:thymeleaf-spring4") compile("org.springframework.boot:spring-boot-starter-security") compile("org.springframework:spring-jdbc") compile("com.h2database:h2:1.4.192") compile("org.slf4j:slf4j-api:1.6.6") compile("ch.qos.logback:logback-core:1.1.7") compile("ch.qos.logback:logback-classic:1.1.7") testCompile "junit:junit:4.11"} |
Таблицы, содержащие определенную информацию, должны быть созданы. Эти таблицы будут иметь имена по умолчанию и имена столбцов, которые Spring ищет для поиска информации.
|
1
2
3
4
5
6
7
8
|
drop table if exists users;create table users(id bigint auto_increment, username varchar(255), password varchar(255), enabled boolean);insert into users(username,password,enabled) values('steve','steve',true);insert into users(username,password,enabled) values('john','john',true);drop table if exists authorities;create table authorities(username varchar(255),authority varchar(255), UNIQUE(username,authority));insert into authorities(username,authority) values('steve','admin');insert into authorities(username,authority) values('john','superadmin'); |
Эти операторы sql будут находиться на resources / schema.sql.
Первый шаг — создать класс приложения.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
package com.gkatzioura.spring.security;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * Created by gkatzioura on 9/2/16. */@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }} |
Для быстрого начала работы база данных будет базой данных h2.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package com.gkatzioura.spring.security.config;import org.h2.jdbcx.JdbcDataSource;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;import java.nio.file.Files;/** * Created by gkatzioura on 9/2/16. */@Configurationpublic class DataSourceConfig { @Bean public DataSource createDataSource() { JdbcDataSource dataSource = new JdbcDataSource(); dataSource.setURL("jdbc:h2:"+System.getProperty("java.io.tmpdir")+"/database"); return dataSource; }} |
Указав базу данных h2, я установил каталог во временный каталог. Поэтому, как только вы перезапустите ОС, база данных исчезнет.
Как упоминалось ранее, после инициализации компонента источника данных spring-jdbc автоматически найдет в папке ресурсов файл schema.sql. Если файл существует, spring-jdbc попытается выполнить операторы, содержащиеся в schema.sql.
Следующим шагом является определение нашей конфигурации безопасности. Мы должны указать, что наша безопасность будет основана на jdbc. Также мы должны определить конечные точки, которые должны быть безопасными.
|
01
02
03
04
05
06
07
08
09
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
|
package com.gkatzioura.spring.security.config;import org.springframework.beans.factory.annotation.Autowired;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 javax.sql.DataSource;/** * Created by gkatzioura on 9/2/16. */@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private DataSource dataSource; @Autowired public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception { auth.jdbcAuthentication().dataSource(dataSource); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/public").permitAll() .anyRequest().authenticated() .and() .formLogin() .permitAll() .and() .logout() .permitAll(); }} |
И последнее, но не менее важное: мы добавим контроллер с защищенной конечной точкой и незащищенной конечной точкой.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package com.gkatzioura.spring.security.controller;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;/** * Created by gkatzioura on 9/2/16. */@RestControllerpublic class GreetController { private static final Logger LOGGER = LoggerFactory.getLogger(GreetController.class); @RequestMapping(path = "/public",method = RequestMethod.GET) public String sayFreeHi() { return "Greeting"; } @RequestMapping(path = "/secured",method = RequestMethod.GET) public String saySecureHi() { return "Secured"; }} |
После того, как вы попытаетесь получить доступ к защищенной конечной точке, отобразится экран входа в систему безопасности Spring по умолчанию.
Продолжите работу с одним из пользователей, указанных в операторах sql (например, имя пользователя: steve, пароль: steve). Если вы хотите выйти из системы, просто нажмите конечную точку выхода из системы / login?
Запустите приложение с
|
1
|
gradle bootRun |
и ты в порядке.
Вы можете найти исходный код на GitHub
| Ссылка: | Spring boot с Spring Security и jdbc от нашего партнера JCG Эммануила Гкатзиураса в блоге gkatzioura . |