AuthenticationProvider
public interface AuthenticationProvider { Authentication authenticate(Authentication authentication) throws AuthenticationException; boolean supports(Class<?> authentication); }
该接口是开始认证的入口,传入用户输入的用户名密码到authenticate方法中进行验证,通过认证就返回用户完整的信息,若认证过程中有任何的错误,就直接抛出AuthenticationException。接下来实现一个简单的AuthenticationProvider:
1. 项目security.xml中添加如下代码:
<security:authentication-manager> <security:authentication-provider ref='myAuthenticationProvider'/> </security:authentication-manager>
2. 创建java类MyAuthenticationProvider 实现AuthenticationProvider接口:
@Component public class MyAuthenticationProvider implements AuthenticationProvider { @Override public boolean supports(Class<?> authentication) { return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication)); } @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String username = authentication.getName(); String password = authentication.getCredentials().toString(); if (!"silentwu".equals(username)) { throw new UsernameNotFoundException("用户不存在"); } if (!"123456".equals(password)) { throw new BadCredentialsException("密码错误"); } return new UsernamePasswordAuthenticationToken(authentication.getPrincipal(), authentication.getCredentials(), Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"))); } }
用户在登录界面中输入用户名:silentwu 密码:123456 那么通过认证,否则返回对应的错误信息。
UserDetailsService
public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; }
这个接口是认证过程的重要接口,只有一个方法,就是通过用户的唯一标识获取到用户的完整信息,包括密码和权限等。接着来看一个简单的实现:
1. 在security.xml中添加如下代码:
<security:authentication-manager> <security:authentication-provider user-service-ref='myUserDetailsService'/> </security:authentication-manager>
2. 创建Java类MyUserDetailsService ,实现UserDetailsService
@Component public class MyUserDetailsService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { return new User("silentwu", "123456", Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"))); } }
在这个类中直接返回一个User对象,用户名是silentwu,密码是123456,对应用户输入的信息是否正确的检测,spring-security已经帮我们检测了
JdbcDaoImpl
通常情况下我们的用户数据都是存放到数据库中的,那么在用户登录的时候需要查询数据库进行验证,spring-security通过JdbcDaoImpl实现了这个功能,JdbcDaoImpl是UserDetailsService的一个子类。
<!--[if !supportLists]-->1.
1. <!--[endif]-->在数据库中执行如下代码:
CREATE TABLE users( username VARCHAR(50) NOT NULL PRIMARY KEY, PASSWORD VARCHAR(50) NOT NULL, enabled BOOLEAN NOT NULL ); CREATE TABLE authorities ( username VARCHAR(50) NOT NULL, authority VARCHAR(50) NOT NULL, CONSTRAINT fk_authorities_users FOREIGN KEY(username) REFERENCES users(username) ); CREATE UNIQUE INDEX ix_auth_username ON authorities (username,authority); insert into `authorities`(`username`,`authority`) values ('silentwu','ROLE_USER'); insert into `users`(`username`,`password`,`enabled`) values ('silentwu','12345',1);
2. 在security.xml中添加代码:
<security:authentication-provider> <security:jdbc-user-service data-source-ref="securityDataSource"/> </security:authentication-provider> </security:authentication-manager>
或者
<security:authentication-manager> <security:authentication-provider user-service-ref='myUserDetailsService'/> </security:authentication-manager> <bean id="myUserDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl"> <property name="dataSource" ref="securityDataSource"/> </bean>
这两种方式都是同样的效果
这样JdbcDaoImpl配置就完成了,很简单。
原理:
首先通过用户提交的用户名查询出用户信息,若没有查询到用户,那么就抛出UsernameNotFoundException
通过查询出来的用户去查询用户的权限表,获取用户的权限
创建UserDetails,返回
相关推荐
10. **spring-security-config-3.1.2.RELEASE.jar**:提供了基于XML或Java的配置方式,用于定义安全规则和策略,如定义访问控制列表,自定义过滤器链等。 通过以上这些jar包,我们可以深入研究Spring Security Web...
Spring Security 是一个强大的Java安全框架,它为Web应用程序提供了全面的安全解决方案。这个压缩包包含了Spring Security的核心组件,以及与其相关的 Acegi Security 框架的一些版本。这些jar包是构建和配置Spring ...
1. **用户认证**:Spring Security 提供了多种认证机制,包括基于内存的用户细节服务、数据库连接的用户细节服务,甚至可以自定义认证提供者。它支持基本认证、表单登录、OAuth2等多种认证方式,确保只有经过验证的...
Spring Security OAuth2是一个广泛使用的Java库,用于在Spring应用程序中实现OAuth2协议,提供安全授权服务。OAuth2是一种授权框架,允许第三方应用在用户许可的情况下访问其私有资源,如在社交媒体上的数据。2.0.3....
这些jar包共同构成了Spring Security 3.1.4的完整框架,为企业级应用提供了强大的安全基础设施,涵盖了从Web应用到分布式系统,从本地用户认证到第三方服务集成的各种安全需求。开发者可以根据实际项目需求选择和...
5. **集成其他认证机制**:除了内存中的用户,Spring Security还支持数据库、LDAP、OAuth2等多种认证方式。 6. **自定义登录页面**:默认的登录页面是`/login`,你可以通过配置`loginPage`属性来自定义登录页面。 ...
Spring Security提供Remember Me服务,可以让用户在一段时间内免登录访问,通过在cookie中存储安全的凭据实现。 5. **CSRF防护**: 默认情况下,Spring Security开启CSRF防护,通过生成并验证CSRF令牌,防止跨站...
这个压缩包包含了Spring Security 4.0.0版本所需的jar包,这是一组核心组件,为构建安全的Web应用提供了基础。 1. **spring-security-core**: - `spring-security-core-4.0.0.CI-SNAPSHOT-javadoc.jar`:包含...
在Spring Boot中,Spring Security 提供了一种简单而有效的方式来保护应用程序,防止未经授权的访问。本资料“spring-security-material-master.zip”显然是一份关于Spring Security的教程材料,特别关注的是在...
本项目“spring-security-oauth2-authorization-server”将带你深入理解如何利用Spring Security OAuth2构建一个授权服务器,以保护你的API并提供安全的访问控制。 OAuth2是一种开放标准,用于授权第三方应用访问...
Spring Security是一款提供全面身份验证、授权和安全访问控制的框架,其设计目标是为应用程序提供声明式和编程式的安全控制。该框架与Spring框架紧密集成,允许开发者轻松地在应用中实现复杂的安全需求。 二、`...
这个"spring-security-3.1.4"版本是该框架的一个稳定发行版,提供了在2012年的安全解决方案。这个zip包包含了Spring Security的核心库、文档、示例代码和其他必要的资源,便于开发者下载和学习。 Spring Security的...
`spring-security-oauth2`提供了与`spring-security-web`的集成,使得资源服务器能够直接使用Spring Security的过滤链进行安全控制。 3. **ClientDetailsService**: 该服务接口用于存储和验证OAuth2客户端的信息,...
2. Spring Security LDAP:Spring Security LDAP是Spring Security的一个模块,它允许开发者将应用的安全认证和授权功能与LDAP服务器集成,从而实现基于目录的服务认证。 二、Spring Security LDAP核心概念 1. ...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。它为Web应用和企业级应用提供安全解决方案,包括用户认证、权限控制、会话管理等多个方面。在Spring Security 3.1.2版本中,...
Spring Security 是一个强大的安全框架,用于Java和Spring应用程序。它为Web应用提供了全面的安全解决...在实际开发中,结合文件"springsecurity"中的示例代码,可以更好地理解和实践Spring Security的Cookie认证功能。
Spring Security OAuth2 是一个强大的框架,用于在Spring应用程序中实现安全性和身份验证。OAuth2 是一个授权框架,允许第三方应用获取有限的访问权限到受保护的资源,而无需分享用户名和密码。本压缩包文件“spring...
Spring Security是一个全面的Java安全框架,它提供了身份验证、授权、会话管理等功能,能够有效地保护Web应用免受各种安全威胁。Spring Security的核心理念是“保护所有,除非明确允许”,这意味着默认情况下,所有...
- **认证**:Spring Security提供了多种认证方式,如基于表单的登录、HTTP基本认证、JWT等。用户可以通过自定义AuthenticationProvider实现自己的认证逻辑,确保用户身份的正确性。 - **授权**:Spring Security的...
Spring Security提供了一整套解决方案,包括认证、授权、会话管理、CSRF防护等,以确保应用程序的安全性。它基于Spring框架构建,易于与其他Spring组件集成,如Spring MVC、Spring Boot等。`spring-security-core`是...