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

让Downpour的Spring Security 2 配置精讲简单化,大家一起学习相关推荐

  1. Spring Security 2 配置精讲

    论坛上看了不少Spring Security的相关文章.这些文章基本上都还是基于Acegi-1.X的配置方式,而主要的配置示例也来自于SpringSide的贡献. 众所周知,Spring Securi ...

  2. java取消 验证_使用Spring Security Java配置时禁用基本身份验证

    我正在尝试使用Spring Security Java配置保护Web应用程序的安全. 这是配置的样子: @Configuration @EnableWebMvcSecurity public clas ...

  3. spring security简单配置

    spring security简单配置 主要集中在5个类里面配置 1,实现UserDetailsService 2,实现AuthenticationManager 3,登录成功与失败的处理 4,访问拒 ...

  4. Spring boot+Spring Security 4配置整合实例

    本例所覆盖的内容: 1. 使用Spring Security管理用户身份认证.登录退出 2. 用户密码加密及验证 3. 采用数据库的方式实现Spring Security的remember-me功能 ...

  5. spring security xml配置官方详解

    6. Security Namespace Configuration 6.1 Introduction 自2.0版本的spring框架以来,命名空间配置已可用. 它允许您使用来自附加XML模式的元素 ...

  6. Spring Security的配置机制早就变了

    以前胖哥说过SecurityConfigurerAdapter会在即将发布的5.7版本作废,从Spring Security 5.4版本开始会提供一个原型范围的HttpSecurity来帮助我们构建过 ...

  7. spring security xml配置详解

    security 3.x <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns= ...

  8. 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 ...

  9. Spring Security新版配置

    配置 需要多少配置? UserDetailsService.UserDetailsPasswordService Filter (AbstractAuthenticationProcessingFil ...

最新文章

  1. 最简单也最难——如何获取到Android控件的高度,获取android控件
  2. android唤醒前台,Android将后台应用唤起到前台的方法 (SDK 4.0, ActivityLifecycleCallbacks)...
  3. MVC日期格式化,后台使用Newtonsoft.Json序列化日期,前端使用”f”格式化日期
  4. CVPR 2020 Workshop on Continual learning in Computer Vision 征稿
  5. Atom飞行手册翻译: 2.3 文本选择
  6. 随想录(redis的学习和使用)
  7. EMNLP 2021 | 罗氏和博阿齐奇大学研究合作团队提出:多标签文本分类中长尾分布的平衡策略...
  8. Unity写的3D人工智能棋类博弈小游戏-四子棋
  9. css能不能实现剪切蒙版,CSS中图形剪切、遮罩功能-及使用说明
  10. 在精益(Lean)中对定理进行证明(第一章)
  11. Dva引用echarts制作统计图表
  12. 每天进步一点点————MUMA架构优化和应用优化
  13. 在使用git bash输入命令时,已输入命令按Backspace键无法删除
  14. 7.2 异常处理(Exception Handing)
  15. 内存占用过高的原因及解决方法
  16. html 水平分割,HTML设置水平分割线
  17. 天润云招股书“失效”:首次冲刺港股上市折戟,称全年业绩将下滑
  18. 测试opencl软件,OpenCL应用测试
  19. 骗了马云 10 亿被骂 4 年后,院士王坚留下 4 条人生启示
  20. 罗技x56c语言编程,【罗技X56评测】模拟飞行好伙伴,X56在x-plane中的应用

热门文章

  1. Excel查找2列相同的数据,并且返回对应列的另1列数据
  2. python中global和def_Python中 Global和Nonlocal的用法详解
  3. 网络篇 物理拓扑与逻辑拓扑-19
  4. C#时间/日期格式大全
  5. 嗨,程序员,你知道高级工程师用的搜索引擎吗?
  6. MacBook Pro 2018电池鼓包、键盘问题免费换新
  7. 酷体网--可以顶(dig)的运动空间
  8. cond怎么读_cond condition是什么意思
  9. 怎样将计算机引入计算教学中,计算教学学习心得
  10. 光纤收发器结构介绍和故障解决