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 403机制的更多相关文章

  1. 浅谈Spring中的Quartz配置

    浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...

  2. 浅谈Spring的两种配置容器

    浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41   作者:黄小鱼ZZZ     ...

  3. 浅谈Java的反射机制和作用

    浅谈Java的反射机制和作用 作者:Java大师 欢迎转载,转载请注明出处 很多刚学Java反射的同学可能对反射技术一头雾水,为什么要学习反射,学习反射有什么作用,不用反射,通过new也能创建用户对象 ...

  4. 浅谈:Redis持久化机制(一)RDB篇

    浅谈:Redis持久化机制(一)RDB篇 ​ 众所周知,redis是一款性能极高,基于内存的键值对NoSql数据库,官方显示,它的读效率可达到11万次每秒,写效率能达到8万次每秒,因为它基于内存以及存 ...

  5. 浅谈:Redis持久化机制(二)AOF篇

    浅谈:Redis持久化机制(二)AOF篇 ​ 上一篇我们提及到了redis的默认持久化方式RDB,是一种通过存储快照数据方式持久化的机制,它在宕机后会丢失掉最后一次更新RDB文件后的数据,这也是由于它 ...

  6. 浅谈Spring MVC知识

    关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...

  7. 1.1浅谈Spring(一个叫春的框架)

    如今各种Spring框架甚嚣尘上,但是终归还是属于spring的东西.所以在这里,个人谈一谈对spring的认识,笔者觉得掌握spring原理以及spring所涉及到的设计模式对我们具有极大的帮助.我 ...

  8. 浅谈C语言中断处理机制

    一.中断机制 1.实现中断响应和中断返回 当CPU收到中断请求后,能根据具体情况决定是否响应中断,如果CPU没有更急.更重要的工作,则在执行完当前指令后响应这一中断请求.CPU中断响应过程如下:首先, ...

  9. 浅谈 ArrayList 及其扩容机制

    浅谈ArrayList ArrayList类又称动态数组,同时实现了Collection和List接口,其内部数据结构由数组实现,因此可对容器内元素实现快速随机访问.但因为ArrayList中插入或删 ...

随机推荐

  1. JS原生第四篇 (帅哥)

      1.1  1. 循环 for(初始化; 退出条件; 增量)  {  } while(退出条件) {     } do {  语句 }  while(退出条件) 2. switch( )   多选1 ...

  2. 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架

    一直准备写这么一篇有关 SSIS 日志系统的文章,但是发现很难一次写的很完整.因为这篇文章的内容可扩展的性太强,每多扩展一部分就意味着需要更多代码,示例和理论支撑.因此,我选择我觉得比较通用的 LOG ...

  3. Github快速入门手册

    最近在试用Github,开源的思想也让人觉得把一些经验分享出来是非常好的事情.附件是doc文件,如有需要请注意查收.希望能对你有帮助. GITHUB基于互联网的版本控制快速入门手册 如有不妥,欢迎指正 ...

  4. 邻接表无向图(三)之 Java详解

    前面分别介绍了邻接表无向图的C和C++实现,本文通过Java实现邻接表无向图. 目录 1. 邻接表无向图的介绍 2. 邻接表无向图的代码说明 3. 邻接表无向图的完整源码 转载请注明出处:http:/ ...

  5. 必应词典3.2去广告备忘笔记(转摘于roustar31)

    下载安装包后,沙盘运行,得到本体BingDict_Setup.msi文件,起作用的就是这个,其他的无视了.使用命令行参数:msiexec /a "d:\BingDict_Setup.msi& ...

  6. [转载]AxureRP常用快捷键

    习惯用Axure快捷键会让你做原型的时候更得心应手.Axure中文网总结了常用的一些快捷键分享给大家 . Axure RP Pro 6.5快捷键大全,如有疏漏,欢迎补充.   基本快捷键:   打开: ...

  7. Image Wall - jQuery & CSS3 图片墙效果

    今天我们要为您展示如何基于 jQuery 和 CSS3 创建一个整洁的图片墙效果.我们的想法是在页面上洒上一些大小不同的缩略图,并在当我们点击图片时候显示丝带,会显示一些描述,再次点击缩略图时,丝带将 ...

  8. C#日期格式转换

    DateTime dt = DateTime.Now; // Label1.Text = dt.ToString();//2005-11-5 13:21:25 // Label2.Text = dt. ...

  9. Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM

    <Windows Azure Platform 系列文章目录> Update: 2016-11-3,如果大家在使用Linux VM,使用FIO进行IOPS测试的时候,请使用以下命令: su ...

  10. 扩展Exception,增加判断Exception是否为SQL引用约束异常方法!

    在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加.修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多 ...