`
Wind_ZhongGang
  • 浏览: 260006 次
  • 性别: 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 参考手册中文版

    5.9后处理配置的对象 45 5.10自定义DSL 46 6.安全命名空间配置 47 6.1简介 47 6.1.1命名空间的设计 49 6.2安全命名空间配置入门 50 6.2.1 web.xml配置 50 6.2.2最小的配置 50 6.2.3表单和基本登录选项 52 设置默认的...

    Spring Security 中文教程.pdf

    5.5. Spring Security中的访问控制(验证) 5.5.1. 安全和AOP建议 5.5.2. 安全对象和AbstractSecurityInterceptor 5.5.2.1. 配置属性是什么? 5.5.2.2. RunAsManager 5.5.2.3. AfterInvocationManager ...

    SpringSecurity 3.0.1.RELEASE.CHM

    5.5. Spring Security中的访问控制(验证) 5.5.1. 安全和AOP建议 5.5.2. 安全对象和AbstractSecurityInterceptor 5.5.2.1. 配置属性是什么? 5.5.2.2. RunAsManager 5.5.2.3. AfterInvocationManager 5.5.2.4...

    Spring Security-3.0.1中文官方文档(翻译版)

    Spring Security-3.0.1 中文官方文档(翻译版) 这次发布的Spring Security-3.0.1 是一个bug fix 版,主要是对3.0 中存在的一些问题进 行修 正。文档中没有添加新功能的介绍,但是将之前拼写错误的一些类名进行...

    SpringBoot+Security+Vue前后端分离开发权限管理系统

    SpringSecurity5+Element?UI+Vue?Admin?Template+蚂蚁可视化AntV?等技术栈开发的项目,采用分布式,多模块,前后端分离开发。包括图形展示、权限管理、用户管理等功能。【后端技术】技术说明Spring?Boot2MVC框架?...

    Spring攻略(第二版 中文高清版).part1

    8.11 用向导表单控制器处理多页表单 331 8.11.1 问题 331 8.11.2 解决方案 331 8.11.3 工作原理 332 8.12 使用注解(JSR-303)的Bean校验 341 8.12.1 问题 341 8.12.2 解决方案 342 8.12.3 工作原理 ...

    Spring攻略(第二版 中文高清版).part2

    8.11 用向导表单控制器处理多页表单 331 8.11.1 问题 331 8.11.2 解决方案 331 8.11.3 工作原理 332 8.12 使用注解(JSR-303)的Bean校验 341 8.12.1 问题 341 8.12.2 解决方案 342 8.12.3 工作原理 ...

    基于Springcloud+mysql的分布式架构网上商城设计与实现(源码+设计文档+部署说明+视频演示).zip

    安全认证与授权:系统实现用户的安全认证和授权,如使用Spring Security、OAuth2等,保护用户信息和资源的安全性。 监控与日志:系统使用监控工具和日志系统,如Spring Cloud Sleuth、Zipkin、ELK Stack等,实现对...

    Spring in Action(第2版)中文版

    7.4.3提示用户登录 7.4.4处理安全例外 7.4.5强制web安全性 7.4.6确保一个安全的通道 7.5视图层安全 7.5.1有条件地渲染内容 7.5.2显示用户身份验证信息 7.6保护方法调用 7.6.1创建一个安全切面 7.6.2使用元...

    Spring in Action(第二版 中文高清版).part2

    7.4.3 提示用户登录 7.4.4 处理安全例外 7.4.5 强制Web安全性 7.4.6 确保一个安全的通道 7.5 视图层安全 7.5.1 有条件地渲染内容 7.5.2 显示用户身份验证信息 7.6 保护方法调用 7.6.1 创建一个安全切面 ...

    Spring in Action(第二版 中文高清版).part1

    7.4.3 提示用户登录 7.4.4 处理安全例外 7.4.5 强制Web安全性 7.4.6 确保一个安全的通道 7.5 视图层安全 7.5.1 有条件地渲染内容 7.5.2 显示用户身份验证信息 7.6 保护方法调用 7.6.1 创建一个安全切面 ...

    SpringBoot2+Spring Security+Vue+ElementUI+蚂蚁金服AntV

    课程概述该互联网实战项目是基于 Spring Boot 2+ SpringSecurity5+Element UI+Vue Admin Template+蚂蚁可视化AntV 等技术栈开发的项目,采用分布式,多模块,前后端分离开发。包括图形展示、权限管理、用户...

    JAVA毕业设计之科研工作量管理系统的设计与实现(springboot+mysql)完整源码.zip

    它支持多用户访问,并提供高性能的数据查询和事务处理能力。 前端技术:可能包括HTML, CSS, JavaScript以及前端框架如Vue.js或React,用于构建动态的用户界面。 安全:Spring Security - 提供认证和授权功能,确保...

    SpringBoot项目“智慧食堂”设计与实现.zip

    9. 安全性与隐私保护:通过Spring Security实现用户认证和授权,保障交易数据的安全和隐私。 10. 多角色接入:定义不同用户角色(如顾客、厨师、收银员),每种角色拥有相应的权限和功能模块。 基于SpringBoot的...

    企业中台后台权限SpringBoot2+Vue实战

    该互联网实战项目是基于 Spring Boot 2+ SpringSecurity5+Element UI+Ant Design Pro Vue+可视化AntV 等技术栈开发的项目,采用多模块前后端分离开发。包括图形展示、权限管理、用户管理等功能,用于研发企业级中...

    基于jbpm与activiti的工作流平台技术架构介绍

    系统的安全管理由Spring Security 3提供配置及管理,非常容易与第三方的用户或认证平台进行整合,如与CAS服务器作统一认证,只需要加上新的配置模块即可实现,不影响系统现有的功能模块。大大满足了各种不同系统的...

    课程设计基于Java实现的校园快递代拿系统源码+sql数据库+项目详细说明.zip

    3. spring security+oauth2使用rsa加密实现认证中心(我这里没有使用io.jsonwebtoken,实际上应该使用,nacos的源码也有使用jjwt,我没使用只是为了更好的熟悉security的部分源码) 4. redis除了用作基本缓存以外,...

    基于SpringBoot+Shiro+Redis+Jwt+Thymeleaf+MyBatis 开发的后台用户、角色+源代码+文档

    前台已经实现用户登录,注册等基础功能。 同时前后台会员实现分表管理,可扩展多角色系统、多权限系统。 采用分层设计、双重验证、提交数据安全编码、密码加密、访问验证、数据权限验证。 使用Maven做项目管理,提高...

    java开源包3

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    springboot基于Web的社区医院管理服务系统.zip

    7. 安全性与隐私保护:通过Spring Security实现用户认证和授权,保障患者数据的安全和隐私。 8. 多角色访问控制:系统定义不同的用户角色(如管理员、医生、护士、患者),每种角色拥有相应的访问权限。 基于...

Global site tag (gtag.js) - Google Analytics