这段时间,工作闲了下来,接触了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. ROS学习笔记(七)——节点

    NEW 1 #打开新的终端,以后不再注释$ sudo apt-get install ros-<distro>-ros-tutorials #下载一个教学用的仿真器$ roscore #运 ...

  2. webpack ,gulp/grunt的介绍

    http://www.jianshu.com/p/42e11515c10f# bfc的概念block formatting context http://www.cnblogs.com/dojo-lz ...

  3. Map的五种遍历方法

    package com.jackey.topic; import java.util.ArrayList;import java.util.HashMap;import java.util.Itera ...

  4. 不在折腾---hbase-0.96.2-hadoop2

    首先安装好zookeeper集群 上传hbase安装包 解压 配置hbase集群,要修改3个文件 * 修改hbase-env.sh 设置JAVA_HOME: export JAVA_HOME=... ...

  5. 用C++画心(转)

    原地址https://www.zhihu.com/topic/19613730/top-answers 首先上一个动态的心 代码如下: #include <stdio.h> #includ ...

  6. 转网页WB.ExecWB控件打印方法

    网页WB.ExecWB控件打印方法 2010-02-01 12:48 代码: <table width="100%" cellpadding="1" on ...

  7. php知识分享

                                                                      PHP 获取ip地址代码汇总                     ...

  8. 解决VS2015安装Android SDK 后文件不全及更新问题

    近日安装VS2015专业版后.想进行Android开发,就新建了一个Blank app 结果报[值不能为空 null 参数名:path1] 1:首先检查工具 xamarin 工具那设置的SDK路径对不 ...

  9. 关于小组所要做的APP的想法

    关于小组所要做的app,我们敲定下来是做关于在线做题的app,但是,纯粹的做题目的app我认为并没有什么大的吸引力,尤其是拿手机做题.所以,我们考虑准备在以下几个方面做功夫以增加吸引力.第一,我们的题 ...

  10. ubuntu下各种压缩包的解压命令

    .tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)-------------------------- ...