`
gogomarine
  • 浏览: 100580 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring security3.0 欢迎界面

阅读更多

Filters:

   ExceptionTranslationFilter:有两种异常抛出!

   

        private void handleException(HttpServletRequest request, HttpServletResponse response, FilterChain chain,
            RuntimeException exception) throws IOException, ServletException {
        if (exception instanceof AuthenticationException) {//如果是AuthenticationException的类型,直接发送到 sendStartAuthentication
            if (logger.isDebugEnabled()) {
                logger.debug("Authentication exception occurred; redirecting to authentication entry point", exception);
            }

            sendStartAuthentication(request, response, chain, (AuthenticationException) exception);
        }
        else if (exception instanceof AccessDeniedException) {
            if (authenticationTrustResolver.isAnonymous(SecurityContextHolder.getContext().getAuthentication())) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Access is denied (user is anonymous); redirecting to authentication entry point",
                            exception);
                }

                sendStartAuthentication(request, response, chain, new InsufficientAuthenticationException(
                        "Full authentication is required to access this resource"));
            }
            else {
                if (logger.isDebugEnabled()) {
                    logger.debug("Access is denied (user is not anonymous); delegating to AccessDeniedHandler",
                            exception);
                }

                accessDeniedHandler.handle(request, response, (AccessDeniedException) exception);
            }
        }
    }
 

   第一种:就是普通的授权异常了!AuthenticationException

   1. 如果没有授权的访问,抛出 AuthenticationException的子类,判断它的类型为AuthenticationException之后,调用sendStartAuthentication方法去判断

      

    protected void sendStartAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain,
            AuthenticationException reason) throws ServletException, IOException {
        // SEC-112: Clear the SecurityContextHolder's Authentication, as the
        // existing Authentication is no longer considered valid
        SecurityContextHolder.getContext().setAuthentication(null);
        requestCache.saveRequest(request, response);
        logger.debug("Calling Authentication entry point.");
        authenticationEntryPoint.commence(request, response, reason);
    }

        清空SecurityContextHolder上下文中的Authentication , 然后委托给authenticationEntryPoint去发送分发页面!默认的是

LoginUrlAuthenticationEntryPoint(我们可在applicationContext.xml配置中,设置entry-point-ref="loginUrlAuthenticationEntryPoint",

这里的loginUrlAuthenticationEntryPoint是自定义的实现类)

              

        <bean:bean id="loginUrlAuthenticationEntryPoint"
		class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"
		p:loginFormUrl="/login/welcome">  <!-- 这里默认是DefaultLoginPageGeneratingFilter.DEFAULT_LOGIN_PAGE_URL? --> /spring_security_login是默认发送到的登录界面   -->
	</bean:bean>

    

    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException)
            throws IOException, ServletException {

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;

        String redirectUrl = null;

        if (useForward) {//是否选择 Forward模式,如果不是,发送302重定向,跳转到 登录页面。默认为false.

            if (forceHttps && "http".equals(request.getScheme())) {
                redirectUrl = buildHttpsRedirectUrlForRequest(httpRequest);
            }

            if (redirectUrl == null) {
                String loginForm = determineUrlToUseForThisRequest(httpRequest, httpResponse, authException);//提供给子类覆盖!,是否临时修改登录界面的URL.

                if (logger.isDebugEnabled()) {
                    logger.debug("Server side forward to: " + loginForm);
                }

                RequestDispatcher dispatcher = httpRequest.getRequestDispatcher(loginForm);

                dispatcher.forward(request, response);

                return;
            }
        } else {
            // redirect to login page. Use https if forceHttps true

            redirectUrl = buildRedirectUrlToLoginPage(httpRequest, httpResponse, authException);//创建重定向URL

        }

        httpResponse.sendRedirect(httpResponse.encodeRedirectURL(redirectUrl));
    }
 

 

 

 

 

   第二种:是访问资源被Denied的异常,AccessDeniedException

 

 

 

分享到:
评论

相关推荐

    springMVC+springSecurity3.0+maven

    标题 "springMVC+springSecurity3.0+maven" 指的是一个集成项目,它结合了Spring MVC、Spring Security 3.0和Maven这三个关键的Java开发工具和技术。让我们逐一深入理解这些技术及其相互之间的关系。 首先,Spring ...

    spring security3.0 spring权限问题

    ### Spring Security 3.0权限问题相关知识点 #### 一、Spring Security简介 **1.1 Spring Security 是什么?** Spring Security 是一个强大的且高度可定制的身份验证和访问控制框架。它为Java应用提供了声明式的...

    spring-security 官方文档 中文版

    本文档所指的版本为 Spring Security 3.0.1,这是一个 bug fix 版本,主要针对 3.0 版本中存在的问题进行修复,确保开发者能够获取更稳定可靠的 Spring Security 库。 **1.4 获取 Spring Security** - **项目模块*...

    springSecurity3例子

    Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理。它为Web应用程序提供了全面的身份验证、授权和访问控制功能。在Spring Security 3版本中,这个框架进一步完善了其特性和性能,使其成为开发者...

    Spring_Security3中文指南.pdf

    ### Spring Security 3.0 入门与核心概念详解 #### 一、Spring Security简介 Spring Security 是一款功能强大且高度可定制的应用安全框架,它为基于 Java 的应用程序提供了全面的安全服务。尤其对于那些采用 ...

    javascript and Spring3.0下载地址

    3. 使用Spring Security来保护应用程序的安全性,防止未授权访问。 4. 在Spring Boot和JavaScript应用之间实现会话管理,例如通过JWT(JSON Web Tokens)进行身份验证。 5. 如何利用Spring的ModelAndView或...

    spring3.0整合mybatis3.0、struts2

    在Spring 3.0版本中,引入了更多的模块,如Spring MVC用于处理HTTP请求,Spring Security用于权限管理,以及Spring Batch用于批量处理等。Spring的核心优势在于其松耦合和模块化设计,使得开发者可以灵活选择需要的...

    Spring_MVC_3.0实战指南

    Spring MVC是Spring框架的一个重要组成部分,它提供了模型-视图-控制器(MVC)架构,使开发者能够将业务逻辑、数据处理和用户界面有效地分离,从而实现更高效、可维护的代码结构。 在Spring MVC中,核心概念包括...

    Spring_Security-3.0.1_中文官方文档

    - **版本标识:** Spring Security 3.0.1 是对3.0版本的一个bug修复版本,主要针对3.0中已知的问题进行修复。 - **版本控制:** 2010年之后,项目的版本控制从SVN切换到了Git。 **1.4 获取 Spring Security** - **...

    Spring_Security-3.0.1文档

    Spring Security 3.0.1是一个bug fix版本,主要目的是修正3.0版本中出现的一些问题,而不包含任何新功能。尽管如此,这一版本的更新仍然很重要,因为它增强了框架的稳定性和安全性。 在Spring Security的项目结构中...

    struts2 spring2.5 hibernate3.0 annotation 整合

    Struts2、Spring2.5和Hibernate3.0是Java Web开发中三个非常重要的框架,它们各自负责不同的职责...在实际项目中,还可以结合其他技术和工具,如MyBatis、AspectJ、Spring Security等,进一步完善系统的功能和安全性。

    Spring3.0+Hibernate4.0+SpringMVC整合ExtJS4

    6. 安全性考虑:可能需要整合Spring Security或其他安全框架,以保护应用程序免受未经授权的访问。 7. 测试:编写单元测试和集成测试,确保每个部分的功能正常,同时优化性能和响应时间。 通过这个整合,开发者...

    基于SpringBoot3.0,SpringCloud2022&Alibaba,SASOAuth2的微服务RBAC 权限管理系统

    本文将深入探讨如何基于Spring Boot 3.0、Spring Cloud 2022 & Alibaba以及SAS OAuth2实现一个强大的微服务RBAC(Role-Based Access Control)权限管理系统。 首先,Spring Boot 3.0是Java开发领域中备受推崇的框架...

    struts2+hibernate3.3+spring3.0示例

    登录时,可能会使用Spring Security进行权限验证。发布信息则涉及Hibernate的持久化操作,比如创建新的帖子、回复等,这些操作需要在事务内完成,以防止数据不一致。 项目的结构通常包含以下几个部分: 1. **Model*...

    SpringBoot3+Vue3开发项目 视频教程 下载 视频教程 百度网盘链接3.zip

    教程将涵盖SpringBoot的配置管理、RESTful API设计、数据库集成(如MyBatis或JPA)以及Spring Security的使用等内容。 Vue3则是Vue.js框架的最新迭代,带来了许多性能优化和设计上的改进。Vue3引入了Composition ...

    springmvc4.1+spring4.1+mybatis3.2+spring-security3.2 jar包

    Spring Security 3.2 提供了对Servlet 3.0 API的支持,增强了Remember-Me服务,改进了CSRF防护,以及更灵活的权限控制机制。 这个整合包的使用意味着你可以快速搭建一个具有用户认证和授权、数据持久化、Web请求...

    spring-3.x-web-app-template:Spring 3.0 MVC 应用程序入门模板

    此外,还可以深入研究Spring Security、Spring AOP等Spring模块,提升Web应用的安全性和可维护性。 通过这个Spring 3.0 MVC入门模板,开发者可以快速上手,体验Spring MVC的高效和便利,为后续的Web开发打下坚实的...

    spring 的权限管理框架 中文参考手册

    本指南的前半部分将介绍Spring Security 3.0的基础知识,包括项目的背景和发展历程,以及如何开始在项目中使用该框架。此外,还将探讨Spring Security的命名空间配置,这种方式提供了一种更简单的方法来替代传统的...

Global site tag (gtag.js) - Google Analytics