这段时间,工作闲了下来,接触了Spring Security,对于我一个基础很差的人来说,无疑是个挑战啊。

经过一段时间的摸索,终于有了点眉目,在这里,要特别感谢http://blog.csdn.net/u012367513/article/details/38866465 二当家的 博文对我的帮助。我的代码也是在他的基础上整理而来,只是增加了自己的一些见解。 再次感谢他的帮助。

我的基础很是薄弱,最然 二当家的 博文中已经讲解的很是清楚,但是我还是希望自己能过上一遍。

本文适宜读者: Spring 基础薄弱,和我一样,配置文件大白的人。  希望高手们都留下宝贵的意见。

废话不多说,开码!

我希望看完这篇文章后我们能解决一下问题:

首先,Spring Security 到底是用来干嘛的?

再次,Security 是怎么工作的?

最后,我们为什么要用Security。

--------------------------------------------------------------------------

我先大体上说下security的工作流程:

   Spring Security对Web安全性的支持大量地依赖于Servlet过滤器。这些过滤器拦截进入请求,并且在应用程序处理该请求之前进行某些安全处理。 Spring Security提供有若干个过滤器,它们能够拦截Servlet请求,并将这些请求转给认证和访问决策管理器处理,从而增强安全性。根据自己的需要,可以使用表7.4中所列的几个过滤器来保护自己的应用程序。http://baike.baidu.com/link?url=LhguUpz1g7MnakDzFDFRK9D7n6u6wFffzSbJ7Zkcq3QMDNy741SpXMVGAb4jfz_GAa5J0ORkYvKEGYOD2bIQsa
对于概念,百度百科上的说很明了。
  在我们访问一个资源的之前,会被AuthenticationProcessingFilter(这个过滤器我们会重写)拦截,然后它会调用securityMetadataSource来获取被访问资源所对应的权限集合,然后调用accessDecisionManager 来确认,我们用户是否有权限访问这个资源。
 
---------------------------说了这么多 ,还没见代码。-------------------------------
每个项目的访问入口都是 web.xml,那我们就看他的代码:
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SpringSecurityDemo</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <!-- 加载Spring security XML 配置文件
为什么要配置这个文件?!!!
因为百度! security是什么? 就是依靠一个特殊的过滤器(DelegatingFilterProxy,他是干嘛的?!),
依靠他来委托一个在spring上下文的一个bean完成工作。
而这个Bean,说白了就是一个过滤器。
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/securityConfig.xml
</param-value>
</context-param> <!-- Spring 容器监听,这尼玛又是个什么东东?
listener. 哦 ,是个监听器啊。
看看他的源码
public void contextInitialized(ServletContextEvent event)
{
contextLoader = createContextLoader();
if(contextLoader == null)
contextLoader = this;
contextLoader.initWebApplicationContext(event.getServletContext());
}
瞅见了么,就特么是来加载上面配置的securityConfig.xml文件
-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 看吧,这就是看个特殊的过滤器,撒手掌柜了,他到底干什么了,为什么我们要配置他?
我们来扒开他的皮,瞅一瞅吧,
//这是他的doFilter方法
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws ServletException, IOException
{
Filter delegateToUse = null;
synchronized(delegateMonitor)
{
if(_flddelegate == null) //如果bean为空
{
WebApplicationContext wac = findWebApplicationContext(); //给我拿来配置文件
if(wac == null) //虾米?配置文件为空?! 妈的,给老子抛异常! 你给老子监听的配置吃啦?!
throw new IllegalStateException("No WebApplicationContext found: no ContextLoaderListener registered?");
_flddelegate = initDelegate(wac); //这是什么?猜都出来了,在配置文件里召唤bean(感情配置文件就是人才市场,掌柜的招小工了..)
}
delegateToUse = _flddelegate; //小工招用完了,就你啦...可怜,三方呢? 工资了? 你他妈的刚毕业吧....
}
invokeDelegate(delegateToUse, request, response, filterChain); //照完小工干嘛去? 干活呗!,给老子干! 干!
}
//这是initDeletegate
protected Filter initDelegate(WebApplicationContext wac)
throws ServletException
{
Filter delegate = (Filter)wac.getBean(getTargetBeanName(), javax/servlet/Filter);
if(isTargetFilterLifecycle())
delegate.init(getFilterConfig());
return delegate;
} //这是invokeDelegate
protected void invokeDelegate(Filter delegate, ServletRequest request, ServletResponse response, FilterChain filterChain)
throws ServletException, IOException
{
delegate.doFilter(request, response, filterChain);
} 咦? 不对呀,小工要造反了怎么办? 你无良老板就啥都不干?
对,我就是啥都不干? 老子就是这么任性。 老子把你们召唤来,就是给了你们生存的价值
(DelegatingFilterProxy做的事情是代理Filter的方法,从application context里获得bean。
这让bean可以获得spring web application context的生命周期支持,使配置较为轻便。)
你们就知足吧! 唉...初来乍到,谁没有被老板坑过....
-->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
 
转载请注明作者:晌午十一点半(http://www.cnblogs.com/qibotean) 原文地址:http://www.cnblogs.com/qibotean/p/4550539.html

Spring Security 从配置入门 学习讲解。万恶之源------------web.xml的更多相关文章

  1. Spring Security 从配置入门 学习讲解。刽子手------------securityConfig.xml

    不知道我的web.xml 大家都理解了没.  废话确实有点多,可能很多知识点,大家都知道,可是我学的时候,压根什么都不懂啊.... 这篇我们要讲刽子手  securityConfig. 为什么要说他是 ...

  2. Spring Security 入门(1-2)Spring Security - 从 配置例子例子 开始我们的学习历程

    1.Spring Security 的配置文件 我们需要为 Spring Security 专门建立一个 Spring 的配置文件,该文件就专门用来作为 Spring Security 的配置. &l ...

  3. Spring Security极简入门三部曲(上篇)

    目录 Spring Security极简入门三部曲(上篇) 写在前面 为什么要用Spring Security 数据库设计 demo时刻 核心代码讲解 小结 Spring Security极简入门三部 ...

  4. SPRING SECURITY JAVA配置:Web Security

    在前一篇,我已经介绍了Spring Security Java配置,也概括的介绍了一下这个项目方方面面.在这篇文章中,我们来看一看一个简单的基于web security配置的例子.之后我们再来作更多的 ...

  5. Spring Security极简入门三部曲(中篇)

    目录 Spring Security极简入门三部曲(中篇) 验证流程 Authentication接口 过滤器链 AuthenticationProvider接口: demo时刻 代码讲解 小结 Sp ...

  6. Spring Security认证配置(三)

    学习本章之前,可以先了解下上篇Spring Security认证配置(二) 本篇想要达到这样几个目的: 1.登录成功处理 2.登录失败处理 3.调用方自定义登录后处理类型 具体配置代码如下: spri ...

  7. Spring Security认证配置(二)

    学习本章之前,可以先了解下上篇Spring Security基本配置. 本篇想要达到这样几个目的: 1.访问调用者服务时,如果是html请求,则跳转到登录页,否则返回401状态码和错误信息 2.调用方 ...

  8. Spring Security认证配置(一)

    学习本章之前,可以先了解下上篇 Spring Security基本配置. 本篇主要讲述Spring Security基于表单,自定义用户认证配置(上篇中的配置,本篇将不再阐述).一共分为三步: 1.处 ...

  9. spring的Java配置入门(Spring Boot学习笔记之一)

    spring的Java配置 1.创建maven项目 使用idea创建maven项目,这里顺便提一下,idea真的比eclipse好用,早点熟悉吧.然后就是maven是java项目管理最主流的工具,自己 ...

随机推荐

  1. linux建立一个快捷方式,连接到另一个目录

    sudo ln -s 源目录 目标快捷方式比如你要在/etc下面建立一个叫LXBC553的快捷方式,指向/home/LXBC,那就是sudo ln -s /home/LXBC /etc/LXBC553

  2. ORACLE迁移votedisk,spfile以及OCRfile的方法

    在安装GUI时,创建了第一块ASM磁盘,命名为DATA1,上面存放了spfile文件,ocrfile文件,并且作为了vote盘.感觉名字和实际不符,容易搞混,所以想删除这个磁盘,直接删除会报错: OR ...

  3. jquery写的ajax

    1.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8& ...

  4. JVM垃圾回收机制总结:调优方法

    转载: JVM垃圾回收机制总结:调优方法 JVM 优化经验总结 JVM 垃圾回收器工作原理及使用实例介绍

  5. Configure Apache Virtual Hosts - CentOS 7

    Difficulty: 2Time: 15 minutes Want to host websites on your server? Using Apache? Great. This articl ...

  6. jQuery Mobile学习日记之HelloWorld

    这里是本人学习jQuery Mobile的过程,主要用于记录,过程中有不对的地方或不严谨的地方,欢予以指出纠正,非常感谢! 1.首先是下载安装以下文件: [Opera Mobile Emulator] ...

  7. 开发Blog整理

    开发Blog记录 清理收藏夹 太多了,来不及看了. http://blog.sina.com.cn/s/blog_67d95f40010113ec.htmlhttp://segmentfault.co ...

  8. guava学习--FutureCallback

    转载:https://my.oschina.net/realfighter/blog/349929 Guava提供了 FutureCallback接口,FutureCallback接口提供了onSuc ...

  9. laravel composer 指定版本

    composer create-project laravel/laravel=5.2.* --prefer-dist

  10. struts2+spring+hibernte整合示例

    简单实现添加用户功能,仅供初学者参考,可自行扩展程序功能(增删改查). 这里贴下代码,需要的可以下载看(因为比较懒). applicationContext.xml <?xml version= ...