原文: https://howtodoinjava.com/spring5/security5/security-java-config-enablewebsecurity-example/

本 Java 示例借助@EnableWebSecurity注解和WebSecurityConfigurerAdapter类启用了 Spring Security Java 配置

此示例基于 spring webmvc Hibernate 集成示例构建。

1. 包含 Spring Security 5 依赖项

包括 SpringSecurity 包。 我正在使用 maven,因此为 spring security 5 添加了相应的依赖项。

pom.xml

  1. <properties>
  2. <failOnMissingWebXml>false</failOnMissingWebXml>
  3. <spring.version>5.0.7.RELEASE</spring.version>
  4. </properties>
  5. <!-- Spring MVC Dependency -->
  6. <dependency>
  7. <groupId>org.springframework</groupId>
  8. <artifactId>spring-webmvc</artifactId>
  9. <version>${spring.version}</version>
  10. </dependency>
  11. <!-- Spring Security Core -->
  12. <dependency>
  13. <groupId>org.springframework.security</groupId>
  14. <artifactId>spring-security-core</artifactId>
  15. <version>${spring.version}</version>
  16. </dependency>
  17. <!-- Spring Security Config -->
  18. <dependency>
  19. <groupId>org.springframework.security</groupId>
  20. <artifactId>spring-security-config</artifactId>
  21. <version>${spring.version}</version>
  22. </dependency>
  23. <!-- Spring Security Web -->
  24. <dependency>
  25. <groupId>org.springframework.security</groupId>
  26. <artifactId>spring-security-web</artifactId>
  27. <version>${spring.version}</version>
  28. </dependency>

2. 创建 Spring Security 5 配置 – @EnableWebSecurity

我创建了这个简单的安全配置,并添加了两个演示用户useradmin

SecurityConfig.java

  1. package com.howtodoinjava.demo.spring.config;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
  5. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  6. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
  7. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  8. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  9. import org.springframework.security.crypto.password.PasswordEncoder;
  10. @EnableWebSecurity
  11. public class SecurityConfig extends WebSecurityConfigurerAdapter {
  12. @Autowired
  13. PasswordEncoder passwordEncoder;
  14. @Override
  15. protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  16. auth.inMemoryAuthentication()
  17. .passwordEncoder(passwordEncoder)
  18. .withUser("user").password(passwordEncoder.encode("123456")).roles("USER")
  19. .and()
  20. .withUser("admin").password(passwordEncoder.encode("123456")).roles("USER", "ADMIN");
  21. }
  22. @Bean
  23. public PasswordEncoder passwordEncoder() {
  24. return new BCryptPasswordEncoder();
  25. }
  26. @Override
  27. protected void configure(HttpSecurity http) throws Exception {
  28. http.authorizeRequests()
  29. .antMatchers("/login").permitAll()
  30. .antMatchers("/admin/**").hasRole("ADMIN")
  31. .antMatchers("/**").hasAnyRole("ADMIN", "USER")
  32. .and().formLogin()
  33. .and().logout().logoutSuccessUrl("/login").permitAll()
  34. .and().csrf().disable();
  35. }
  36. }

3. 初始化 Spring Security

在 Spring 中,使用DelegatingFilterProxy实现安全性。 要使用 Java 配置的 spring 容器注册它,您应该使用AbstractSecurityWebApplicationInitializer

Spring 将在应用程序启动期间检测到此类的实例,并在其他已注册过滤器之前注册DelegatingFilterProxy以使用springSecurityFilterChain。 它还注册了ContextLoaderListener

SpringSecurityInitializer.java

  1. package com.howtodoinjava.demo.spring.config;
  2. import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
  3. public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer {
  4. //no code needed
  5. }

另外,包括SecurityConfigAppInitializer

AppInitializer.java

  1. package com.howtodoinjava.demo.spring.config;
  2. import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
  3. public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  4. @Override
  5. protected Class<?>[] getRootConfigClasses() {
  6. return new Class[] { HibernateConfig.class, SecurityConfig.class };
  7. }
  8. @Override
  9. protected Class<?>[] getServletConfigClasses() {
  10. return new Class[] { WebMvcConfig.class };
  11. }
  12. @Override
  13. protected String[] getServletMappings() {
  14. return new String[] { "/" };
  15. }
  16. }

4. 验证 Spring Security

启动应用程序并启动主页。 您将获得一个登录页面。 这意味着 SpringSecurity 装置已配置并正常工作。

Spring Security 5 – Java 配置 - 图1

登录表单

使用用户名/密码登录 - user123456

Spring Security 5 – Java 配置 - 图2

登录成功

学习愉快!

下载源码