申明: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后,我觉得我做得太可笑了。
分享到:
相关推荐
<groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>5.x.x.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</...
<input type="text" name="user.name" value="downpour"/> <select name="user.gender"> <option value="MALE">男性</option> <option value="FEMALE">女性</option> </select> <input type="submit" value=...
《Struts2技术内幕:深入解析Struts2架构设计与实现原理》由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。《Struts2技术内幕:深入...
《Struts2技术内幕:深入解析Struts2架构设计与实现原理》由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。《Struts2技术内幕:深入...
《Struts2技术内幕:深入解析Struts2架构设计与实现原理》由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。 本书以Struts2的...
本书由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。 本书以Struts2的源代码为依托,通过对Struts2的源代码的全面剖析深入...
《Struts2技术内幕:深入解析Struts2架构设计与实现原理》由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。《Struts2技术内幕:深入...
Downpour 的官方存储库,Rayne 的 WYSIWYG 嵌入式关卡编辑器。 它包含构建 Downpour 模块本身所需的一切。 欢迎使用叉子!建造注意:截至目前,Downpour 可能使用最新 Rayne alpha 版本中尚不可用的 API,因此无法...
资源名称:Struts2技术内幕:深入解析Struts架构设计与实现原理内容简介:本书由国内极为资深的Struts2技术专家(网名:downpour)亲自执笔,iteye兼CSDN产品总监范凯(网名:robbin)以及51CTO等技术社区鼎力推荐。...
而机器学习则是人工智能的一个子领域,专注于开发算法,让机器能够基于数据自我学习和改进。 在内容部分中,提到了论文的主要贡献者,包括多位来自Google公司的研究人员,以及他们开发的软件框架DistBelief和两种...
飞桨(PaddlePaddle)是中国首个开源的深度学习框架,源自产业实践,为企业级用户提供了一整套完整的深度学习开发工具和服务。飞桨的核心特点在于其强大的分布式训练能力,能够支持超大规模的深度学习模型训练,并且...
还可以使用描述具体天气状况的词汇,如downpour(倾盆大雨)、drizzle(毛毛雨)等。 4. 正文: - 正文应使用第一人称和一般过去时,讲述旅行过程中的见闻和感受。开头可以简要介绍旅行的时间、地点和参与者。 - ...
【高级英语答案借鉴.pdf】 这篇内容涉及的是对中东市集...综上所述,这篇内容不仅让我们了解了中东市集的文化特点,也为我们提供了丰富的英语词汇学习材料,包括不同的词性和构词法,有助于提升英语阅读和写作能力。
2) n. + v. 结构,如daybreak(黎明)、mooise(牛叫声)、bullfight(斗牛); 3) v. + n. 结构,如cutback(削减)、cutthroat(残忍的竞争)、rollway(滚道); 4) adj. + n. 结构,如short-term(短期的)、...
)和“She was caught in the downpour.”(她被大雨淋到了。) 2. 无形态标志的被动句,通过上下文和语境理解被动关系,如:“Two-thirds of the area are covered with immense forests of pine, spruce and ...
【天气英语词汇】是英语学习中的一个重要组成部分,尤其对于那些需要与国际友人交流或旅行的人来说,掌握这些词汇能帮助他们更准确地描述天气情况。以下是一些关键的天气相关词汇及其含义: 1. **AM Clouds / PM ...