`
确实比较男
  • 浏览: 115611 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring-security提供的认证方式(一)

阅读更多

  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,返回

 

 

分享到:
评论

相关推荐

    spring-security-web源码所需jar包

    10. **spring-security-config-3.1.2.RELEASE.jar**:提供了基于XML或Java的配置方式,用于定义安全规则和策略,如定义访问控制列表,自定义过滤器链等。 通过以上这些jar包,我们可以深入研究Spring Security Web...

    spring-security所需要的jar包,

    Spring Security 是一个强大的Java安全框架,它为Web应用程序提供了全面的安全解决方案。这个压缩包包含了Spring Security的核心组件,以及与其相关的 Acegi Security 框架的一些版本。这些jar包是构建和配置Spring ...

    spring-security Jar包

    1. **用户认证**:Spring Security 提供了多种认证机制,包括基于内存的用户细节服务、数据库连接的用户细节服务,甚至可以自定义认证提供者。它支持基本认证、表单登录、OAuth2等多种认证方式,确保只有经过验证的...

    spring-security-oauth2-2.0.3.jar(包括jar包,源码,doc)

    Spring Security OAuth2是一个广泛使用的Java库,用于在Spring应用程序中实现OAuth2协议,提供安全授权服务。OAuth2是一种授权框架,允许第三方应用在用户许可的情况下访问其私有资源,如在社交媒体上的数据。2.0.3....

    spring-security3.1.4 完整的jar包

    这些jar包共同构成了Spring Security 3.1.4的完整框架,为企业级应用提供了强大的安全基础设施,涵盖了从Web应用到分布式系统,从本地用户认证到第三方服务集成的各种安全需求。开发者可以根据实际项目需求选择和...

    spring-boot-security

    5. **集成其他认证机制**:除了内存中的用户,Spring Security还支持数据库、LDAP、OAuth2等多种认证方式。 6. **自定义登录页面**:默认的登录页面是`/login`,你可以通过配置`loginPage`属性来自定义登录页面。 ...

    spring-security源代码

    Spring Security提供Remember Me服务,可以让用户在一段时间内免登录访问,通过在cookie中存储安全的凭据实现。 5. **CSRF防护**: 默认情况下,Spring Security开启CSRF防护,通过生成并验证CSRF令牌,防止跨站...

    spring security 4.0.0所需jar包

    这个压缩包包含了Spring Security 4.0.0版本所需的jar包,这是一组核心组件,为构建安全的Web应用提供了基础。 1. **spring-security-core**: - `spring-security-core-4.0.0.CI-SNAPSHOT-javadoc.jar`:包含...

    spring-security-material-master.zip

    在Spring Boot中,Spring Security 提供了一种简单而有效的方式来保护应用程序,防止未经授权的访问。本资料“spring-security-material-master.zip”显然是一份关于Spring Security的教程材料,特别关注的是在...

    spring-security-oauth2-authorization-server.zip

    本项目“spring-security-oauth2-authorization-server”将带你深入理解如何利用Spring Security OAuth2构建一个授权服务器,以保护你的API并提供安全的访问控制。 OAuth2是一种开放标准,用于授权第三方应用访问...

    spring-security-core-3.1.0.RC1.jar

    Spring Security是一款提供全面身份验证、授权和安全访问控制的框架,其设计目标是为应用程序提供声明式和编程式的安全控制。该框架与Spring框架紧密集成,允许开发者轻松地在应用中实现复杂的安全需求。 二、`...

    spring-security-3.1.4

    这个"spring-security-3.1.4"版本是该框架的一个稳定发行版,提供了在2012年的安全解决方案。这个zip包包含了Spring Security的核心库、文档、示例代码和其他必要的资源,便于开发者下载和学习。 Spring Security的...

    spring-security-oauth2与spring-security-web 3.1.2 源码

    `spring-security-oauth2`提供了与`spring-security-web`的集成,使得资源服务器能够直接使用Spring Security的过滤链进行安全控制。 3. **ClientDetailsService**: 该服务接口用于存储和验证OAuth2客户端的信息,...

    spring-security-ldap-2.0.1

    2. Spring Security LDAP:Spring Security LDAP是Spring Security的一个模块,它允许开发者将应用的安全认证和授权功能与LDAP服务器集成,从而实现基于目录的服务认证。 二、Spring Security LDAP核心概念 1. ...

    springsecurity所有jar包

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。它为Web应用和企业级应用提供安全解决方案,包括用户认证、权限控制、会话管理等多个方面。在Spring Security 3.1.2版本中,...

    spring-security cookie认证

    Spring Security 是一个强大的安全框架,用于Java和Spring应用程序。它为Web应用提供了全面的安全解决...在实际开发中,结合文件"springsecurity"中的示例代码,可以更好地理解和实践Spring Security的Cookie认证功能。

    spring-Security-oauth2.zip

    Spring Security OAuth2 是一个强大的框架,用于在Spring应用程序中实现安全性和身份验证。OAuth2 是一个授权框架,允许第三方应用获取有限的访问权限到受保护的资源,而无需分享用户名和密码。本压缩包文件“spring...

    Spring-Security-Demo-master.zip

    Spring Security是一个全面的Java安全框架,它提供了身份验证、授权、会话管理等功能,能够有效地保护Web应用免受各种安全威胁。Spring Security的核心理念是“保护所有,除非明确允许”,这意味着默认情况下,所有...

    spring-security-2.0.5

    - **认证**:Spring Security提供了多种认证方式,如基于表单的登录、HTTP基本认证、JWT等。用户可以通过自定义AuthenticationProvider实现自己的认证逻辑,确保用户身份的正确性。 - **授权**:Spring Security的...

    spring-security-core-2.0.5.RELEASE.src

    Spring Security提供了一整套解决方案,包括认证、授权、会话管理、CSRF防护等,以确保应用程序的安全性。它基于Spring框架构建,易于与其他Spring组件集成,如Spring MVC、Spring Boot等。`spring-security-core`是...

Global site tag (gtag.js) - Google Analytics