让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中了 )
<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后,我觉得我做得太可笑了。
让Downpour的Spring Security 2 配置精讲简单化,大家一起学习相关推荐
- Spring Security 2 配置精讲
论坛上看了不少Spring Security的相关文章.这些文章基本上都还是基于Acegi-1.X的配置方式,而主要的配置示例也来自于SpringSide的贡献. 众所周知,Spring Securi ...
- java取消 验证_使用Spring Security Java配置时禁用基本身份验证
我正在尝试使用Spring Security Java配置保护Web应用程序的安全. 这是配置的样子: @Configuration @EnableWebMvcSecurity public clas ...
- spring security简单配置
spring security简单配置 主要集中在5个类里面配置 1,实现UserDetailsService 2,实现AuthenticationManager 3,登录成功与失败的处理 4,访问拒 ...
- Spring boot+Spring Security 4配置整合实例
本例所覆盖的内容: 1. 使用Spring Security管理用户身份认证.登录退出 2. 用户密码加密及验证 3. 采用数据库的方式实现Spring Security的remember-me功能 ...
- spring security xml配置官方详解
6. Security Namespace Configuration 6.1 Introduction 自2.0版本的spring框架以来,命名空间配置已可用. 它允许您使用来自附加XML模式的元素 ...
- Spring Security的配置机制早就变了
以前胖哥说过SecurityConfigurerAdapter会在即将发布的5.7版本作废,从Spring Security 5.4版本开始会提供一个原型范围的HttpSecurity来帮助我们构建过 ...
- spring security xml配置详解
security 3.x <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns= ...
- spring security 3配置ACL时报java.lang.NoSuchMethodError: net.sf.ehcache.Cache.init
严重: Exception sending context initialized event to listener instance of class org.springframework.we ...
- Spring Security新版配置
配置 需要多少配置? UserDetailsService.UserDetailsPasswordService Filter (AbstractAuthenticationProcessingFil ...
最新文章
- 最简单也最难——如何获取到Android控件的高度,获取android控件
- android唤醒前台,Android将后台应用唤起到前台的方法 (SDK 4.0, ActivityLifecycleCallbacks)...
- MVC日期格式化,后台使用Newtonsoft.Json序列化日期,前端使用”f”格式化日期
- CVPR 2020 Workshop on Continual learning in Computer Vision 征稿
- Atom飞行手册翻译: 2.3 文本选择
- 随想录(redis的学习和使用)
- EMNLP 2021 | 罗氏和博阿齐奇大学研究合作团队提出:多标签文本分类中长尾分布的平衡策略...
- Unity写的3D人工智能棋类博弈小游戏-四子棋
- css能不能实现剪切蒙版,CSS中图形剪切、遮罩功能-及使用说明
- 在精益(Lean)中对定理进行证明(第一章)
- Dva引用echarts制作统计图表
- 每天进步一点点————MUMA架构优化和应用优化
- 在使用git bash输入命令时,已输入命令按Backspace键无法删除
- 7.2 异常处理(Exception Handing)
- 内存占用过高的原因及解决方法
- html 水平分割,HTML设置水平分割线
- 天润云招股书“失效”:首次冲刺港股上市折戟,称全年业绩将下滑
- 测试opencl软件,OpenCL应用测试
- 骗了马云 10 亿被骂 4 年后,院士王坚留下 4 条人生启示
- 罗技x56c语言编程,【罗技X56评测】模拟飞行好伙伴,X56在x-plane中的应用