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.8 repositories { 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. */ @SpringBootApplication public 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. */ @Configuration public 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. */ @EnableWebSecurity public 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. */ @RestController public 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 . |