首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-10-26 
让Downpour的Spring Security 2 配置精讲简单化,大家一起学习申明:Spring Security 2 配置精讲,系Downpo

让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,具体加密方法有好几种.见:<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中了让Downpour的<Spring Security 二 配置精讲>简单化,大家一起学习)

?

antlr-2.7.6.jarasm-attrs.jarasm.jaraspectjrt.jaraspectjweaver.jarc3p0-0.9.1.2.jarcglib-2.1.3.jarcglib-nodep-2.1_3.jarclasses12.jarcommon-annotations.jarcommons-beanutils-1.7.0.jarcommons-chain-1.1.jarcommons-codec.jarcommons-collections-2.1.1.jarcommons-dbcp.jarcommons-digester-1.8.jarcommons-fileupload-1.1.1.jarcommons-io-1.1.jarcommons-lang.jarcommons-logging-1.0.4.jarcommons-pool.jarcommons-validator-1.3.1.jarconcurrent-1.3.2.jarconnector.jardom4j-1.6.1.jarehcache-1.2.3.jarfreemarker-2.3.8.jarhibernate-annotations.jarhibernate-commons-annotations.jarhibernate-entitymanager.jarhibernate3.jarjavaee.jarjavassist.jarjstl-1.0.2.jarlog4j-1.2.11.jarmysql-connector-java-5.0.0-beta-bin.jarognl-2.6.11.jarservlet-api.jarspring-security-core-2.0.4.jarspring-security-core-tiger-2.0.4.jarspring-security-taglibs-2.0.4.jarspring.jarstandard.jarstruts2-core-2.0.14.jarstruts2-spring-plugin-2.0.14.jarxwork-2.0.7.jar

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

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

?

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

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

?

?

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后,我觉得我做得太可笑了。

?

?




ENDLOCAL 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%

5 楼 yudylaw 2012-04-06   call %DOMAIN_HOME%\bin\setClassPathEnv.cmd
set CLASSPATH=%CLASSPATH%;%XXX_PATH%

热点排行