Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,它提供了全面的安全性支持,适用于基于 Spring 的应用程序。然而,当你的应用程序不是基于 Spring Boot 时,Spring Security 的配置和使用可能会有所不同。
适用于任何需要安全性的基于 Spring 的应用程序,包括 Web 应用程序、RESTful 服务、企业应用程序等。
问题:非 Spring Boot 应用程序的 Spring Security 不起作用。
原因:
确保在你的 pom.xml
或 build.gradle
文件中包含了 Spring Security 的依赖。
Maven 示例:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.6.1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.6.1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.6.1</version>
</dependency>
如果你使用的是基于 XML 的配置,确保你的 web.xml
文件中正确配置了 Spring Security。
web.xml 示例:
<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>
如果你使用的是基于 Java 的配置,确保你的配置类正确配置了 Spring Security。
Java 配置示例:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("{noop}password").roles("USER");
}
}
确保你的 Spring 容器正确初始化,并且 Spring Security 的配置类被正确加载。
确保 Spring Security 的过滤器链正确配置,并且没有被其他过滤器干扰。
通过以上步骤,你应该能够解决非 Spring Boot 应用程序中 Spring Security 不起作用的问题。
领取专属 10元无门槛券
手把手带您无忧上云