`
noble510520
  • 浏览: 56181 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

浅谈spring security 403机制

 
阅读更多

403就是access denied ,就是请求拒绝,因为权限不足

三种权限级别

一、无权限访问

<security:http security="none" pattern="/index.jsp" />

这种即是不需要登录,也可以访问的,但是不会传csrf_key

二、匿名访问

<security:http>

<security:intercept-url pattern="/index.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>

</security:http>

这种也是不需要登录就访问的,但是会传csrf_key

三、有权限访问

<security:http>

<security:intercept-url pattern="/index.jsp" access="xxxxx"/>

</security:http>

这种就需要用户登录了,而且需要相应的权限才能访问,不然就报403(access denied)

没有跳转403?

今天遇到了一个诡异的问题

admin.jsp设置为access="USER",需要用户登录了,而且需要有USER权限才能访问

然而我没登陆的时候,去访问admin.jsp,结果没有跳到403页面,跳到了login.jsp

在我预想的是,跳到403

原因

当用户已经登录了,但是权限不足,才会跳转到403

当用户没有登录的时候,访问有权限的页面,只会跳转到登陆页面

机制

spring security处理请求的时候,先会检测用户是否登录,也就是检测是否有authentication(身份)

此时,如果用户没有登录,而且请求是需要登录的action,spring security会跳转到登陆页面,就算这个页面需要权限访问,也不会出现403。

登录的时候,会在SecurityContextHolder里面放一个记录用户信息(用户名、权限)的principal,需要验证用户权限的时候,就会从SecurityContextHolder取出principal来验证权限。

如果用户已经登录了(有了authentication),如果用户的权限不足,就会报403 这个时候security:access-denied-handler才会生效

自定义403

想要自定义403,需要在spring-security.xml里面设置security:access-denied-handler

有两种方式:

指定AccessDeniedHandler

自定义一个403处理机制,需要实现AccessDeniedHandler接口,实现里面的handle方法

当权限不足的时候,spring security会调用handle方法

可以在handle方法里面重定向或者转发请求

代码demo

public class AccessDeniedServletHandler implements AccessDeniedHandler {

	private static final String DEF_ERROR_PAGE_PATH="action/deniedServlet_denied";
	
	@Override
	public void handle(HttpServletRequest request, HttpServletResponse response,
			AccessDeniedException accessDeniedException) throws IOException, ServletException {
		response.sendRedirect(DEF_ERROR_PAGE_PATH);
	}

}

在spring-security.xml配置

<security:access-denied-handler ref="accessDeniedServletHandler" />

<bean id="accessDeniedServletHandler" class="com.xxx.servlet.AccessDeniedServletHandler" scope="singleton"></bean>

指定error-page

这种方式,实际上是转发请求,做不到重定向

在spring-security.xml配置

<security:access-denied-handler error-page="403.html" />

整合Struts的问题

情景

前提:自定义的403页面的URL,是通过struts的action访问的

当权限不足的时候,将请求转发到自定义的403页面时,会出现404( not found)

但是直接访问403页面的时候,又是正常的

原因

所以推测

spring security 的DefaultSecurityFilterChain在strust的filter之后

所以struts捕获不到请求的403页面,但是请求方式又是action,所以就找不到页面了

结论

所以这样子的话,一切spring security 处理完成后自定义跳转,都是在strust的filter之后的

像登录成功的authentication-success-handler-ref,退出的success-handler-ref以及access denied的security:access-denied-handler

所以访问action的小心的,要用重定向的方式



查看原文:http://139.129.55.235/2016/06/01/%e6%b5%85%e8%b0%88spring-security-403%e6%9c%ba%e5%88%b6/
分享到:
评论

相关推荐

    SpringSecurity.pdf

    Spring Security提供了丰富的认证机制,支持多种认证方式,包括但不限于表单认证、LDAP认证、CAS认证等。认证成功后,用户的身份会被标记为已认证,然后系统根据用户的权限来进行授权,授权是指决定一个已认证的用户...

    安全框架Spring Security深入浅出视频教程

    首先,SSM环境中我们通过xml配置的方式,从源码渗入开始,完成Spring Security基本的“认证”和“授权”功能讲解,其中还会融合“记住我”,CSRF拦截等技术。 然后,我们会在SpringBoot环境中,继续展开Spring ...

    Spring Security 3.pdf

    Spring Security 是一个强大的Java安全框架,专为Java和Spring生态系统设计,用于实现全面的身份验证、授权和服务级安全功能。在Spring Security 3版本中,它引入了许多改进和新特性,以适应不断变化的安全需求和...

    初识 Spring Security - v1.1.pdf

    - **概念**:Spring Security 提供了丰富的session管理机制,包括检测session超时、并发控制以及防止session固定攻击等功能。 - **检测session超时**:当session超时时,可以通过配置自动清除用户认证信息。 - **...

    Spring Security in Action

    * 高度灵活性:Spring Security 提供了多种身份验证、授权和访问控制机制,满足不同需求。 * 广泛的应用场景:Spring Security 可以应用于多种应用场景,例如 web 应用、后台服务等。 * 高度可配置性:Spring ...

    Spring Security 资料合集

    - **认证**:Spring Security 提供了多种认证机制,包括基于表单的身份验证、HTTP基本认证、OAuth2等。用户可以通过配置自定义认证提供者来实现特定的认证流程。 - **授权**:授权是控制用户访问应用资源的过程。...

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

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

    Spring Security.pdf

    Spring Security是基于Spring框架的身份认证和用户授权的安全框架,其目的在于为Web应用程序提供一套完整的安全性解决方案。Spring Security利用了Servlet过滤器、Spring的依赖注入(IOC)和面向切面编程(AOP)技术...

    spring security 完整项目实例

    登录功能是Spring Security的基础,它提供了默认的登录页面和处理机制。你可以通过配置HttpSecurity来定制登录过程,例如设置登录URL、失败URL和成功处理器。Spring Security支持基于表单的身份验证,也支持OAuth2和...

    springsecurity学习笔记

    Spring Security 是一个强大的Java安全框架,用于保护基于Spring的应用程序。它提供了全面的安全服务,包括认证、授权、CSRF防护、会话管理等。在深入理解Spring Security之前,我们需要了解几个核心概念: 1. **...

    SpringSecurity学习总结源代码

    SpringSecurity是Java开发中用于构建安全Web应用的框架,它提供了强大的身份验证、授权和访问控制功能。在本文中,我们将深入探讨SpringSecurity的核心概念、关键组件以及如何配置和使用这个框架。 首先,Spring...

    最详细Spring Security学习资料(源码)

    攻击防护:Spring Security内置了对常见攻击(如跨站点请求伪造、会话固定攻击、点击劫持等)的防护机制,帮助开发者提高应用程序的安全性。 会话管理:Spring Security支持对用户会话状态的管理,包括会话超时、...

    spring spring security2.5 jar

    在"spring security2.5 jar"中,包含了Spring Security框架的核心类和接口,这些类和接口定义了安全控制的基本机制。比如: 1. **认证**:这是验证用户身份的过程,Spring Security提供了多种认证方式,如基于表单...

    SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    为了解决Ajax登录请求问题,我们可以使用Spring Security的 Ajax 登录请求处理机制。首先,我们需要创建一个Spring Boot工程,并引入Web、Spring Security、MySQL和MyBatis依赖项。然后,我们需要配置application....

    spring security 官方文档

    Spring Security 是一个强大的安全框架,用于为Java应用提供全面的安全管理解决方案。它是Spring生态系统的组成部分,专注于身份验证、授权和访问控制。Spring Security的核心特性包括: 1. **身份验证...

    spring security3 中文版本

    ### Spring Security 3.0.1 中文版知识点解析 #### 一、Spring Security 3.0.1 概览 ##### 1.1 Spring Security 是什么? Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架。它提供了许多功能...

    spring security3.0所需要的最精简的jar包

    Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理。它提供了认证、授权和访问控制功能,使得开发者可以轻松地在应用程序中实现复杂的安全需求。在3.0版本中,Spring Security 已经相当成熟,提供...

    SpringSecurity笔记,编程不良人笔记

    SpringSecurity是Java领域中一款强大的安全框架,主要用于Web应用程序的安全管理。它提供了全面的身份验证、授权、会话管理以及安全相关的功能,可以帮助开发者构建安全的Web应用。在本笔记中,我们将深入探讨Spring...

    spring security 4.0.0所需jar包

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,广泛用于Java应用程序的安全性管理。这个压缩包包含了Spring Security 4.0.0版本所需的jar包,这是一组核心组件,为构建安全的Web应用提供了...

    spring-security 官方文档 中文版

    - Spring Security 的验证机制允许开发者自定义认证过程,包括用户凭证的检查和存储。 - **直接设置 SecurityContextHolder 的内容**:允许在特定情况下直接设置用户的 Authentication 信息,从而绕过常规的身份...

Global site tag (gtag.js) - Google Analytics