让我来分享一下关于“Spring Security实现HTTP认证”的完整攻略。
Spring Security简介
Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。Spring Security 提供了一组可以在 Spring 应用上下文中配置的 Bean,充分利用了 Spring IoC、DI(控制反转和依赖注入)和 AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,避免了传统的通过在每个访问处编程进行访问控制的繁琐工作。
Spring Security 是一个基于过滤器(Filter)链的框架,整个过程的控制是通过一系列的过滤器链来完成的。
Spring Security实现HTTP认证的完整攻略
1.添加Spring Security依赖
在 pom.xml 文件中添加以下 Spring Security 依赖
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring-security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring-security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring-security.version}</version>
</dependency>
2.配置Spring Security
在 Spring 配置文件中添加以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<!-- 定义用户认证信息 -->
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="john" password="doe" authorities="ROLE_USER" />
<security:user name="jane" password="doe" authorities="ROLE_USER, ROLE_ADMIN" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
<!-- 配置HTTP基础认证 -->
<security:http auto-config="false" use-expressions="true">
<security:http-basic />
<security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
<security:intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
</security:http>
</beans>
以上配置完成了 Spring Security 的基础配置。
3.创建示例程序
在 src/main/java 目录下创建 com.example 包,并添加如下两个类:HelloController 和 SpringSecurityConfig。
HelloController类
在 HelloController 类中定义两个接口:
@RestController
public class HelloController {
@GetMapping("/")
public String home() {
return "Hello World";
}
@GetMapping("/admin")
public String admin() {
return "Hello Admin";
}
}
其中,home 接口返回 “Hello World”,admin 接口返回 “Hello Admin”。
SpringSecurityConfig类
SpringSecurityConfig 类用于配置 Spring Security。
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("john").password("{noop}doe").roles("USER")
.and()
.withUser("jane").password("{noop}doe").roles("USER", "ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
其中,configureGlobal 方法用于定义用户认证信息,configure 方法用于配置 HTTP 认证。
4.运行示例程序
在浏览器中访问 http://localhost:8080/,输入用户名和密码 john/doe,可以看到 “Hello World”。
在浏览器中访问 http://localhost:8080/admin,输入用户名和密码 jane/doe,可以看到 “Hello Admin”。
这样一个基于 Spring Security 的 HTTP 认证就完成了。
示例说明
以上两个示例涉及到了基于 Spring.xml 和 Java Config 两种方式实现 Spring Security 的 HTTP 认证。
在 Spring.xml 中,我们定义用户认证信息,并配置 HTTP 基础认证。
在 Java Config 中,我们通过继承 WebSecurityConfigurerAdapter 类,重写 configure(HttpSecurity http) 和 configureGlobal(AuthenticationManagerBuilder auth) 方法来完成 Spring Security 的配置。
两种方式都可以实现 Spring Security 的 HTTP 认证,你可以根据自己的需求选择一种方式实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Security实现HTTP认证 - Python技术站