`

让Downpour的<Spring Security 2 配置精讲>简单化,大家一起学习

阅读更多

申明:Spring Security 2 配置精讲 ,系Downpour原创

 

-------------------------Begin----------------------------

 

       "Spring Security 2 配置精讲" 让我认识了Spring Security(以下都简称Security),一直在做毕业设计,最近需要做点安全控制方面的事,所以就来javaeye搜了一下,Downpour写的非常不错,详细明了。我也是在看完了140多页的中文文档后才略微了解,我仔细看了

"Spring Security 2 配置精讲" 的评论,很多初学者和我一样,遇到不少问题。这里主要是提供一个简化

"Spring Security 2 配置精讲" 罢了,同时融合一点Struts2。

          期待Downpour能尽快放出他的大作把Security和Struts2能完全融合起来,特别是拦截器,还有验证。

 

原作者使用了Jetty,这个是做测试非常方便,我相信大多数初学者和我一样没有用过它,都是Tomcat吧,简化版中就没有它。

 

      1.为了方便测试,我直接把一些目录放到了WebRoot下面,都是为了快速学习啊,我一直是这么干的。

      2.我把数据库security.sql也打包进去了,可以直接导入Mysql,编码是utf8

 

 

      我把所遇到过的迷惑拿出来给大家提个醒吧:

 

       1.这里密码都是经过md5加密的,salt值默认是null,具体加密方法有好几种.见:org.springframework.security.providers.encoding包下

<authentication-provider user-service-ref="securityManager">
		<password-encoder hash="md5"/>
	</authentication-provider>

 我也写了一个简单的测试类,一看就懂

com.javaeye.sample.support.JUnit.test
 

 

     2.Struts2的FilterDispather一定要配置在Security的DelegatingFilterProxy后面,在web.xml中。(好像是:拦截器链中当退出FilterDispachter时数据会被压栈处理,Security就获得不到数据,因为数据被OGNL放入ValueStack中了 )

 

写道
<!-- Spring security Filter -->
<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>

<!-- Struts2 Begin -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Struts2 End -->

 

  3·鉴于有些初学者还需要jar包,我做点多余的事吧,我现在这个需要的jar包都有这些

antlr-2.7.6.jar
asm-attrs.jar
asm.jar
aspectjrt.jar
aspectjweaver.jar
c3p0-0.9.1.2.jar
cglib-2.1.3.jar
cglib-nodep-2.1_3.jar
classes12.jar
common-annotations.jar
commons-beanutils-1.7.0.jar
commons-chain-1.1.jar
commons-codec.jar
commons-collections-2.1.1.jar
commons-dbcp.jar
commons-digester-1.8.jar
commons-fileupload-1.1.1.jar
commons-io-1.1.jar
commons-lang.jar
commons-logging-1.0.4.jar
commons-pool.jar
commons-validator-1.3.1.jar
concurrent-1.3.2.jar
connector.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
freemarker-2.3.8.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar
hibernate3.jar
javaee.jar
javassist.jar
jstl-1.0.2.jar
log4j-1.2.11.jar
mysql-connector-java-5.0.0-beta-bin.jar
ognl-2.6.11.jar
servlet-api.jar
spring-security-core-2.0.4.jar
spring-security-core-tiger-2.0.4.jar
spring-security-taglibs-2.0.4.jar
spring.jar
standard.jar
struts2-core-2.0.14.jar
struts2-spring-plugin-2.0.14.jar
xwork-2.0.7.jar

 3·我当时在写这个个时候是设置断点调试,观察Security到底是运行的,就设置了一个断点,当然你得加入Security的源代码(推荐大家这样做,我看完中文文档还是迷糊,但是Debug后就豁然开朗了)

   我是设置在com.javaeye.sample.security.support.SecurityManagerSupport

 

 

 

4·Debug程序你会发现:(大家Debug直前一定得记得把源文件匹配上,否则你看不到Java代码的,全是Class)

      loadUserByUsername 只是返回了UserDetails,其实后面许多事都是框架自身帮你完成了,比如:密码加码,校验等。

 

 就拿密码校验来说吧: 你肯定想知道为啥你没做密码校验,它是如何完成的?

        Debug后一直setp Over,如果你输入的密码错误,用户名正确,会进入:

org.springframework.security.providers.dao.AbstractUserDetailsAuthenticationProvider

   它是个abstract Class,只有一个子类:

org.springframework.security.providers.dao.DaoAuthenticationProvider

  具体验证用户密码的地方是:

 

 

try {
                user = retrieveUser(username, (UsernamePasswordAuthenticationToken) authentication);
            } catch (UsernameNotFoundException notFound) {
                if (hideUserNotFoundExceptions) {
                    throw new BadCredentialsException(messages.getMessage(
                            "AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
                } else {
                    throw notFound;
                }
            }

 密码错误的话就抛异常,然后由Security的一些异常处理拦截器来处理了,都是框架帮我们做好了。

 

  如果大家仔细Debug 观察,其实分析拦截器执行顺序,会比较容易学习特别是像Security和Struts2这类使用了Aop的框架。

 

 

-------------------------End----------------------------

 

PS:我做的毕业设计(电子银行)中,以前没有用Security,但是鉴于项目业务涉及到的安全问题肯定是老师问的重点(被雷过),所以不得不做得严谨一些,但是我感觉我之前的设计现在修改起来,工作量还是比较大,因为我直前对管理员做过权限管理,而普通用户没有做,只是用Filter和Interceptor做了一些简单的控制,但是当我读完Security后,我觉得我做得太可笑了。

 

 

8
1
分享到:
评论
5 楼 yudylaw 2012-04-06  
call %DOMAIN_HOME%\bin\setClassPathEnv.cmd
set CLASSPATH=%CLASSPATH%;%XXX_PATH%
4 楼 yudylaw 2012-04-06  
set XXX_LIBS=C:\Program\jars

@REM for yudylaw
set XXX_PATH=%XXX_PATH%;%XXX_LIBS%\ehcache-1.2.3.jar
set XXX_PATH=%XXX_PATH%;%XXX_LIBS%\hibernate3.jar

@REM for liuyu
set XXX_PATH=%XXX_PATH%;%XXX_LIBS%\antlr-2.7.6.jar

echo XXX_PATH=%XXX_PATH%

3 楼 yudylaw 2012-04-06  
@ECHO OFF

@REM WARNING: This file is created by the Configuration Wizard.
@REM Any changes to this script may be lost when adding extensions to this configuration.

SETLOCAL


set DOMAIN_HOME=c:\bea\user_projects\domains\yu_domain

set lib="-Dweblogic.ext.dirs=C:\Program\lib"

call "%DOMAIN_HOME%\bin\startWebLogic.cmd" %lib%



ENDLOCAL
2 楼 yudylaw 2010-12-15  
lovebin_bin 写道
怎么不把jar包放上去?

jar 包上面不是贴出来了嘛,再放进去太大了。其实就用到那几个包。
1 楼 lovebin_bin 2010-12-14  
怎么不把jar包放上去?

相关推荐

    不错的spring security 例子

    &lt;groupId&gt;org.springframework.security&lt;/groupId&gt; &lt;artifactId&gt;spring-security-web&lt;/artifactId&gt; &lt;version&gt;5.x.x.RELEASE&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.security&lt;/...

    Struts2中的参数传递

    &lt;input type="text" name="user.name" value="downpour"/&gt; &lt;select name="user.gender"&gt; &lt;option value="MALE"&gt;男性&lt;/option&gt; &lt;option value="FEMALE"&gt;女性&lt;/option&gt; &lt;/select&gt; &lt;input type="submit" value=...

    struts2技术内幕+struts2权威指南

    《Struts2技术内幕:深入解析Struts2架构设计与实现原理》由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。《Struts2技术内幕:深入...

    Struts2 技术内幕-深入解析Struts2架构设计与实现原理

    《Struts2技术内幕:深入解析Struts2架构设计与实现原理》由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。《Struts2技术内幕:深入...

    struts2 技术内幕——深入解析struts2架构设计

    《Struts2技术内幕:深入解析Struts2架构设计与实现原理》由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。  本书以Struts2的...

    Struts2技术内幕.pdf

    本书由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。  本书以Struts2的源代码为依托,通过对Struts2的源代码的全面剖析深入...

    Struts2 技术内幕——深入解析Struts2架构设计与实现原理.pdf

    《Struts2技术内幕:深入解析Struts2架构设计与实现原理》由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。《Struts2技术内幕:深入...

    Downpour:超级棒的 WYSIWYG 编辑器,用于超级棒的引擎

    Downpour 的官方存储库,Rayne 的 WYSIWYG 嵌入式关卡编辑器。 它包含构建 Downpour 模块本身所需的一切。 欢迎使用叉子!建造注意:截至目前,Downpour 可能使用最新 Rayne alpha 版本中尚不可用的 API,因此无法...

    Struts2技术内幕:深入解析Struts架构设计与实现原理

    资源名称:Struts2技术内幕:深入解析Struts架构设计与实现原理内容简介:本书由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。...

    large deep networks

    而机器学习则是人工智能的一个子领域,专注于开发算法,让机器能够基于数据自我学习和改进。 在内容部分中,提到了论文的主要贡献者,包括多位来自Google公司的研究人员,以及他们开发的软件框架DistBelief和两种...

    13-4飞桨框架和分布式训练及其应用.pdf

    飞桨(PaddlePaddle)是中国首个开源的深度学习框架,源自产业实践,为企业级用户提供了一整套完整的深度学习开发工具和服务。飞桨的核心特点在于其强大的分布式训练能力,能够支持超大规模的深度学习模型训练,并且...

    unit1__写作专项课件-pdf (2).ppt

    还可以使用描述具体天气状况的词汇,如downpour(倾盆大雨)、drizzle(毛毛雨)等。 4. 正文: - 正文应使用第一人称和一般过去时,讲述旅行过程中的见闻和感受。开头可以简要介绍旅行的时间、地点和参与者。 - ...

    高级英语答案借鉴.pdf

    【高级英语答案借鉴.pdf】 这篇内容涉及的是对中东市集...综上所述,这篇内容不仅让我们了解了中东市集的文化特点,也为我们提供了丰富的英语词汇学习材料,包括不同的词性和构词法,有助于提升英语阅读和写作能力。

    大学高级英语第一册第11课译文及课后答案.docx

    2) n. + v. 结构,如daybreak(黎明)、mooise(牛叫声)、bullfight(斗牛); 3) v. + n. 结构,如cutback(削减)、cutthroat(残忍的竞争)、rollway(滚道); 4) adj. + n. 结构,如short-term(短期的)、...

    精品(2021-2022年)资料英汉对比翻译解析.doc

    )和“She was caught in the downpour.”(她被大雨淋到了。) 2. 无形态标志的被动句,通过上下文和语境理解被动关系,如:“Two-thirds of the area are covered with immense forests of pine, spruce and ...

    天气英语词汇大全[推荐].doc

    【天气英语词汇】是英语学习中的一个重要组成部分,尤其对于那些需要与国际友人交流或旅行的人来说,掌握这些词汇能帮助他们更准确地描述天气情况。以下是一些关键的天气相关词汇及其含义: 1. **AM Clouds / PM ...

Global site tag (gtag.js) - Google Analytics