快速搭建环境
1. 添加依赖
Spring Security 的依赖管理需明确区分模块,避免引入 Spring Boot 相关依赖。以 Maven 为例:
<!-- 核心依赖:Web 安全支持 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>6.2.0</version>
</dependency>
<!-- 安全配置支持(如 Java Config) -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>6.2.0</version>
</dependency>
<!-- Servlet API 依赖(非 Spring Boot 项目需手动添加) -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
2. 初始化安全配置
方式一:XML 配置(传统方式)
-
配置
web.xml
注册 Spring Security 的入口过滤器DelegatingFilterProxy
:<!-- 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>
-
创建安全配置文件
security.xml
定义 URL 权限规则和认证方式:<beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/security" 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.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd"> <!-- 配置 HTTP 安全规则 --> <security:http auto-config="true"> <security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" /> <security:intercept-url pattern="/user/**" access="ROLE_USER" /> <security:form-login login-page="/login" /> <security:logout logout-url="/logout" /> </security:http> <!-- 内存用户认证 --> <security:authentication-manager> <security:authentication-provider> <security:user-service> <security:user name="admin" password="{noop}admin123" authorities="ROLE_ADMIN" /> <security:user name="user" password="{noop}password" authorities="ROLE_USER" /> </security:user-service> </security:authentication-provider> </security:authentication-manager> </beans>
方式二:Java 配置(推荐方式)
-
创建安全配置类
使用@EnableWebSecurity
和@Configuration
注解:@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authorize -> authorize .requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/user/**").hasRole("USER") .requestMatchers("/login", "/static/**").permitAll() .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login") // 自定义登录页 .defaultSuccessUrl("/home") .permitAll() ) .logout(logout -> logout .logoutUrl("/logout") .logoutSuccessUrl("/login?logout") ); return http.build(); } // 内存用户认证(仅示例,生产环境需替换为数据库) @Bean public UserDetailsService userDetailsService() { UserDetails admin = User.withUsername("admin") .password("{noop}admin123") .roles("ADMIN") .build(); UserDetails user = User.withUsername("user") .password("{noop}password") .roles("USER") .build(); return new InMemoryUserDetailsManager(admin, user); } }
-
注册 Spring Security 过滤器链
在web.xml
中初始化 Spring 容器:<!-- 加载 Spring 配置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml /WEB-INF/securityConfig.xml <!-- 若使用 XML 配置 --> </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
3. 验证环境是否生效
-
访问受保护资源
- 尝试访问
/admin/dashboard
,应自动跳转到/login
页面。 - 使用
admin/admin123
登录后,应能正常访问/admin/**
路径。
- 尝试访问
-
检查权限控制
- 使用
user/password
登录后,访问/admin/dashboard
应返回403 Forbidden
。
- 使用
-
查看日志
- 启用 Spring Security 调试日志,观察过滤器链执行流程:
# logback.xml 或 application.properties logging.level.org.springframework.security=DEBUG
- 启用 Spring Security 调试日志,观察过滤器链执行流程:
4. 常见问题
-
静态资源被拦截
- 确保放行静态资源路径:
.requestMatchers("/css/**", "/js/**").permitAll()
- 确保放行静态资源路径:
-
密码编码问题
- 使用
{noop}
前缀表示明文密码(仅测试用),生产环境需配置PasswordEncoder
:@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }
- 使用
-
配置未生效
- 检查
@EnableWebSecurity
是否添加,或 XML 配置是否正确加载。
- 检查
通过本章节,你可以快速搭建一个基于传统 Spring MVC 的 Spring Security 环境,并实现基础的认证与授权功能。后续章节将深入认证、授权及高级配置的细节。