`
Wind_ZhongGang
  • 浏览: 263170 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring Security 3多用户登录实现之六 用户验证后处理

 
阅读更多

 

   验证用户后主要有这样两种走向,一种是验证失败,一种是验证成功,验证失败后应该如何处理呢,验证成功又该如何处理呢?

 

   验证失败的处理需要实现AuthenticationFailureHandler接口,我的前台用户认证失败的处理是这样的

 

 

package com.template.security.authentication.handler;

import com.template.security.shared.DirectUrlResolver;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 12-11-9
 * Time: 下午11:20
 */
public class MultipleAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler {
    private List<DirectUrlResolver> resolvers = new ArrayList<DirectUrlResolver>();

    @Override
    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
        for (DirectUrlResolver resolver : resolvers) {
            if (resolver.support(request)) {
                String directUrl = resolver.directUrl();
                setDefaultFailureUrl(directUrl);
            }
        }

        super.onAuthenticationFailure(request, response, exception);
    }

    public void setResolvers(List<DirectUrlResolver> resolvers) {
        this.resolvers = resolvers;
    }
}

 

    验证成功的处理需要实现AuthenticationSuccessHandler接口,我的后台验证成功处理是这样的

 

 

package com.template.security.authentication.handler;

import com.template.security.shared.DirectUrlResolver;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 12-11-9
 * Time: 下午11:20
 */
public class MultipleAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
    private List<DirectUrlResolver> resolvers = new ArrayList<DirectUrlResolver>();

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        for (DirectUrlResolver resolver : resolvers) {
            if (resolver.support(request)) {
                String directUrl = resolver.directUrl();
                setDefaultTargetUrl(directUrl);
            }
        }

        super.onAuthenticationSuccess(request, response, authentication);
    }

    public void setResolvers(List<DirectUrlResolver> resolvers) {
        this.resolvers = resolvers;
    }
}

 

    不论是前台验证成功还是后台验证成功,前台验证失败还是后台验证失败我都有不同的处理,前台验证成功导向前台验证成功界面,后台验证成功导向后台验证成功界面, 前台验证失败导向前台登录界面, 后台验证失败导向后台登录界面,所以这里我使用了前面我书写的一个通用接口,也就是DirectUrlResolver。来看看验证处理成功或失败的配置信息。

 

 

   <beans:bean id="multipleAuthenticationSuccessHandler"
                class="com.template.security.authentication.handler.MultipleAuthenticationSuccessHandler">
        <beans:property name="alwaysUseDefaultTargetUrl" value="true"/>
        <beans:property name="resolvers">
            <beans:list>
                <beans:ref bean="backendAuthenticationSuccessUrlResolver"/>
                <beans:ref bean="forendAuthenticationSuccessUrlResolver"/>
            </beans:list>
        </beans:property>
    </beans:bean>

    <beans:bean id="backendAuthenticationSuccessUrlResolver"
                class="com.template.security.shared.RequestParameterDirectUrlResolver">
        <beans:property name="parameterName" value="token"/>
        <beans:property name="pattern" value="backend"/>
        <beans:property name="directUrl" value="/backend/login/success"/>
    </beans:bean>

    <beans:bean id="forendAuthenticationSuccessUrlResolver"
                class="com.template.security.shared.RequestParameterDirectUrlResolver">
        <beans:property name="parameterName" value="token"/>
        <beans:property name="pattern" value="forend"/>
        <beans:property name="directUrl" value="/forend/login/success"/>
    </beans:bean>

    <beans:bean id="multipleAuthenticationFailureHandler"
                class="com.template.security.authentication.handler.MultipleAuthenticationFailureHandler">
        <beans:property name="resolvers">
            <beans:list>
                <beans:ref bean="backendAuthenticationFailureUrlResolver"/>
                <beans:ref bean="forendAuthenticationFailureUrlResolver"/>
            </beans:list>
        </beans:property>
    </beans:bean>

    <beans:bean id="backendAuthenticationFailureUrlResolver"
                class="com.template.security.shared.RequestParameterDirectUrlResolver">
        <beans:property name="parameterName" value="token"/>
        <beans:property name="pattern" value="backend"/>
        <beans:property name="directUrl" value="/backend/login?error=1"/>
    </beans:bean>

    <beans:bean id="forendAuthenticationFailureUrlResolver"
                class="com.template.security.shared.RequestParameterDirectUrlResolver">
        <beans:property name="parameterName" value="token"/>
        <beans:property name="pattern" value="forend"/>
        <beans:property name="directUrl" value="/forend/login?error=1"/>
    </beans:bean>

 

    这里还需要将相应的验证Handler注入到前讲的认证处理Filter中。

分享到:
评论

相关推荐

    Spring Security 3多用户登录实现之七 用户验证失败处理改进

    在"Spring Security 3多用户登录实现之七 用户验证失败处理改进"这个主题中,我们将探讨如何优化Spring Security的用户验证流程,以提高用户体验和系统安全性。 1. **用户验证流程**: Spring Security的认证过程...

    Spring Security 3多用户登录实现之十一 退出

    以下是一些关于实现Spring Security多用户登录退出功能的关键知识点: 1. **配置注销URL**: 在Spring Security的配置中,你需要定义一个注销URL,如`/logout`。例如,在XML配置中,你可以使用`&lt;http&gt;`元素的`...

    SpringBoot + SpringSecurity + JPA 实现用户角色权限登录认证

    在这个项目中,SpringSecurity被用来处理用户登录、角色权限分配和防止非法请求。 3. **JPA**:Java Persistence API是Java平台上的ORM(对象关系映射)规范,它允许开发者以面向对象的方式操作数据库,将数据对象...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    在压缩包文件`spring_gateway_security_webflux`中,可能包含了示例代码或配置文件,用于演示如何在Spring Cloud Gateway中集成Spring Security,实现统一登录认证鉴权。这些资源可以帮助开发者更快地理解和实践上述...

    spring-security多登录页面配置

    本文将详细介绍如何在Spring Security框架下配置多登录页面,包括前台与后台用户的分开登录界面,以及注销登录后返回到不同的页面等功能。 #### 一、Spring Security简介 Spring Security是Spring家族中的一个子...

    springSecurity 实现传参

    在这个场景中,我们关注的是如何使用Spring Security实现登录验证以及在登录过程中传递参数,特别是记录并返回用户登录前的页面。我们将深入探讨这个过程,并结合MySQL数据库的使用。 首先,让我们了解Spring ...

    spring security + oauth 2.0 实现单点登录、认证授权

    在Spring Security和OAuth 2.0的组合中,`xp-sso-server`充当认证中心,处理所有用户的登录和授权请求。 - 当用户在任何客户端应用(如`xp-sso-client-a`或`xp-sso-client-b`)上尝试访问受保护资源时,会被重定向...

    spring-security多个登录页面配置

    在Spring Security框架中实现多个登录页面的配置是一项高级特性,主要应用于区分前端用户与后端管理员的不同登录需求。本文将详细介绍如何通过Spring Security配置多个登录页面,并为不同类型的用户设置不同的登录...

    Spring Security 3.pdf

    Spring Security 3提供了“记住我”服务,允许用户在关闭浏览器后仍保持登录状态。这通过在用户认证成功时生成一个持久化的令牌来实现。 五、CSRF保护 为了防止跨站请求伪造(CSRF)攻击,Spring Security 3引入了...

    单点登录SSO解决方案之SpringSecurity+JWT实现.docx

    ### 单点登录SSO解决方案之SpringSecurity+JWT实现 #### 一、单点登录(SSO)概述 单点登录(Single Sign-On,简称SSO)是一种认证机制,允许用户仅通过一次登录就能访问同一域下的多个应用程序和服务。这种机制...

    SpringSecurity.pdf

    在用户登录时,认证过程首先通过用户表来校验用户身份。认证成功后,授权过程会检查用户的关联角色,进一步确定用户的角色权限和角色菜单,从而决定用户能够访问的菜单和拥有哪些操作权限。 Spring Security为...

    Spring_Security_多页面登录配置教程

    `AuthenticationProcessingFilter`是Spring Security中用于处理用户登录请求的核心组件之一。它负责接收用户提交的登录信息并进行验证。为了支持多页面登录,我们需要为每个登录页面配置一个`...

    spring-security使用数据库用户认证

    在本主题中,我们将深入探讨如何使用Spring Security与数据库配合,实现用户认证。这一过程涉及多个步骤,包括配置、数据库模型、用户DetailsService 和权限控制。 1. **配置Spring Security** 在Spring Security...

    单点登录实现 Spring_security+CAS

    3. **CAS客户端配置**:在应用中集成CAS作为SSO的客户端,需要在Spring Security的配置中加入CAS的相关配置,如指定CAS服务器地址、服务验证URL等。同时,配置CAS过滤器以处理用户的身份验证请求。 4. **Spring ...

    Spring Security通过AuthenticationManager的逻辑实现多种认证方式.docx

    反之,如果认证成功,`successfulAuthentication`方法会被调用,此时可以配置`AuthenticationSuccessHandler`来决定如何处理成功认证后的请求,例如重定向到主页或者显示欢迎信息。 值得注意的是,`sessionStrategy...

    SpringSecurity+JWT前后端分离架构登录认证!

    在前后端分离的场景下,Spring Security 可以作为后端的身份验证服务,处理用户的登录请求,确保只有合法的用户能够访问受保护的资源。 **JWT** JWT 是一种轻量级的身份验证标准,用于在网络应用环境中安全地传输...

    spring security用户权限项目

    3. **过滤器链(Filter Chain)**:Spring Security 使用一系列过滤器处理请求,如 `SecurityContextPersistenceFilter` 保存和恢复安全上下文,`UsernamePasswordAuthenticationFilter` 处理登录请求。理解过滤器链...

    Spring Security3 简单demo

    例如,你可以指定哪些URL需要用户登录后才能访问,哪些URL可以匿名访问。还可以配置登录页面、注销行为、CSRF保护等。 2. **** 子元素:这些子元素定义了URL模式及其对应的访问权限。例如,`**" access="ROLE_ADMIN...

Global site tag (gtag.js) - Google Analytics