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/
分享到:
相关推荐
Spring Security提供了丰富的认证机制,支持多种认证方式,包括但不限于表单认证、LDAP认证、CAS认证等。认证成功后,用户的身份会被标记为已认证,然后系统根据用户的权限来进行授权,授权是指决定一个已认证的用户...
首先,SSM环境中我们通过xml配置的方式,从源码渗入开始,完成Spring Security基本的“认证”和“授权”功能讲解,其中还会融合“记住我”,CSRF拦截等技术。 然后,我们会在SpringBoot环境中,继续展开Spring ...
Spring Security 是一个强大的Java安全框架,专为Java和Spring生态系统设计,用于实现全面的身份验证、授权和服务级安全功能。在Spring Security 3版本中,它引入了许多改进和新特性,以适应不断变化的安全需求和...
- **概念**:Spring Security 提供了丰富的session管理机制,包括检测session超时、并发控制以及防止session固定攻击等功能。 - **检测session超时**:当session超时时,可以通过配置自动清除用户认证信息。 - **...
* 高度灵活性:Spring Security 提供了多种身份验证、授权和访问控制机制,满足不同需求。 * 广泛的应用场景:Spring Security 可以应用于多种应用场景,例如 web 应用、后台服务等。 * 高度可配置性:Spring ...
- **认证**:Spring Security 提供了多种认证机制,包括基于表单的身份验证、HTTP基本认证、OAuth2等。用户可以通过配置自定义认证提供者来实现特定的认证流程。 - **授权**:授权是控制用户访问应用资源的过程。...
在压缩包文件`spring_gateway_security_webflux`中,可能包含了示例代码或配置文件,用于演示如何在Spring Cloud Gateway中集成Spring Security,实现统一登录认证鉴权。这些资源可以帮助开发者更快地理解和实践上述...
Spring Security是基于Spring框架的身份认证和用户授权的安全框架,其目的在于为Web应用程序提供一套完整的安全性解决方案。Spring Security利用了Servlet过滤器、Spring的依赖注入(IOC)和面向切面编程(AOP)技术...
登录功能是Spring Security的基础,它提供了默认的登录页面和处理机制。你可以通过配置HttpSecurity来定制登录过程,例如设置登录URL、失败URL和成功处理器。Spring Security支持基于表单的身份验证,也支持OAuth2和...
Spring Security 是一个强大的Java安全框架,用于保护基于Spring的应用程序。它提供了全面的安全服务,包括认证、授权、CSRF防护、会话管理等。在深入理解Spring Security之前,我们需要了解几个核心概念: 1. **...
SpringSecurity是Java开发中用于构建安全Web应用的框架,它提供了强大的身份验证、授权和访问控制功能。在本文中,我们将深入探讨SpringSecurity的核心概念、关键组件以及如何配置和使用这个框架。 首先,Spring...
攻击防护:Spring Security内置了对常见攻击(如跨站点请求伪造、会话固定攻击、点击劫持等)的防护机制,帮助开发者提高应用程序的安全性。 会话管理:Spring Security支持对用户会话状态的管理,包括会话超时、...
在"spring security2.5 jar"中,包含了Spring Security框架的核心类和接口,这些类和接口定义了安全控制的基本机制。比如: 1. **认证**:这是验证用户身份的过程,Spring Security提供了多种认证方式,如基于表单...
为了解决Ajax登录请求问题,我们可以使用Spring Security的 Ajax 登录请求处理机制。首先,我们需要创建一个Spring Boot工程,并引入Web、Spring Security、MySQL和MyBatis依赖项。然后,我们需要配置application....
Spring Security 是一个强大的安全框架,用于为Java应用提供全面的安全管理解决方案。它是Spring生态系统的组成部分,专注于身份验证、授权和访问控制。Spring Security的核心特性包括: 1. **身份验证...
### Spring Security 3.0.1 中文版知识点解析 #### 一、Spring Security 3.0.1 概览 ##### 1.1 Spring Security 是什么? Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架。它提供了许多功能...
Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理。它提供了认证、授权和访问控制功能,使得开发者可以轻松地在应用程序中实现复杂的安全需求。在3.0版本中,Spring Security 已经相当成熟,提供...
SpringSecurity是Java领域中一款强大的安全框架,主要用于Web应用程序的安全管理。它提供了全面的身份验证、授权、会话管理以及安全相关的功能,可以帮助开发者构建安全的Web应用。在本笔记中,我们将深入探讨Spring...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,广泛用于Java应用程序的安全性管理。这个压缩包包含了Spring Security 4.0.0版本所需的jar包,这是一组核心组件,为构建安全的Web应用提供了...
- Spring Security 的验证机制允许开发者自定义认证过程,包括用户凭证的检查和存储。 - **直接设置 SecurityContextHolder 的内容**:允许在特定情况下直接设置用户的 Authentication 信息,从而绕过常规的身份...