热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springsecurity3.x学习(25)_bean配置跑springsecurity(mysql数据库)

看springsecurity有一段时间了,一直迷惑于springsecurity使用的不方便,今天看书的时候,终于提到了自定义的springsecurity,下边就是书中提出的神图(我是看了一
看spring security有一段时间了,一直迷惑于spring security使用的不方便,今天看书的时候,终于提到了自定义的spring security,下边就是书中提出的神图(我是看了一下,没怎么看懂,但是我觉得自己做完再回来看肯定就差不多了。)
直接看配置文件:



filters="
securityContextPersistenceFilter,
usernamePasswordAuthenticationFilter,
anonymousAuthenticationFilter,
filterSecurityInterceptor" />



这样就可以获得一个自己的过滤器链顺序了。
如果将这与风格的配置进行对比的话,我们要注意以下的配置元素:
1.  默认过滤器链的建立是在处理元素的时候自动包含的并不需要直接配置。尽管使用security命名空间的重写或扩展标准过滤器链的时候,允许很大程度的灵活性,但它并不能够得到FilterChainProxy本身。
2.  基于URL模式修改过滤器链并不适用于风格的声明。如果应用的某些部分不需要特定的处理这将会有用处,并且能使得过滤器的调用尽可能得少。 需要意识到很重要的一点是,不同于Spring 的一些配置(比较明显的如,在web.xml中的contextConfigLocation),在过滤器的名字之间需要需要使用逗号分隔。

接下来就应该是慢慢配置了:
      class="org.springframework.security.web.context.SecurityContextPersistenceFilter"/>

"  SecurityContextPersistenceFilter用来建立SecurityContext,而它被用来贯穿整个request过程以跟踪请求者的认证信息。你可能记得我们在上一章的Spring  MVC代码中,为了得到当前认证过的Principa时,访问过SecurityContext对象。 "
          class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">


"  正如我们在第二章中详细介绍的那样,UsernamePasswordAuthenticationFilter用来处理form 提交并检查认证存储是否为合法凭证。明确配置这个过滤器,对比security命名空间的配置."
               class="org.springframework.security.web.authentication.AnonymousAuthenticationFilter">



"我们的站点允许匿名访问。尽管对于比较特殊的条件AnonymousAuthenticationFilter并不需要,但是通常情况下会使用它,因为只对请求添加了一点的预处理。你可能并不认识这个 过 滤 器 , 除 了 我 们 在 第 二 章 对 其 简 短 提 到 以 外 。 这 是 因 为 对 于AnonymousAuthenticationFilter的配置都掩盖在security命名空间之中。列出的这两个属性都是需要的。userAttribute 属性声明了为匿名用户提供的用户名和GrantedAuthority。用户名和GrantedAuthority可能在我们的应用中用来验证用户是不是匿名用户。Key 可 能 是 随 机 生 成 的 , 但 是 需 要 在 一 个 bean 中 使 用(o.s.s.authentication.AnonymousAuthenticationProvider),我们稍后将会进行配置。"
          class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">











  在我们基本处理过滤器链的最后一个是最终负责检查Authentication的,而这是前面已配置的安全过滤器的处理结果。正是这个过滤器确定一个特定的请求最终是被拒绝还是被接受。 
再建立一些bean去辅助完成上边的功能:

           id="affirmativeBased">







id="roleVoter" />
id="authenticatedVoter" />

class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">


class="org.springframework.security.authentication.AnonymousAuthenticationProvider">



class="org.springframework.security.authentication.ProviderManager">







然后看到这里,我决定自己写一个连接mysql的spring security自定义例子。













这样就可以连接我们自己的mysql数据库了。
连接数据库以后,我继续研究这本书中写的知识点,发现突然又跳到了Session生命周期,估计后边肯定能用到,所以我就也跟着看了:pring Security有很多地方影响用户的HttpSession的生命周期。有很多功能只有将相关类配置成Spring  bean时才可用。以下的表格列出了能够影响session创建和销毁的bean属性:


我们了解这些知识以后,重新进行过滤器链的配置:



filters="
securityContextPersistenceFilter,
logoutFilter,
usernamePasswordAuthenticationFilter,
rememberMeAuthenticationFilter,
anonymousAuthenticationFilter,
exceptionTranslationFilter,
filterSecurityInterceptor" />


配置一些这里我们还没有写的过滤器。














,接下来又配置了记住密码过滤器:

class="org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter">




class="org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices">






class="org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl">



class="org.springframework.security.authentication.RememberMeAuthenticationProvider">


因为rememberme是有一个认证提供者,所以我们需要把它加入认证管理器中:

class="org.springframework.security.authentication.ProviderManager">








那好,加入这个以后,我们知道,当用户登陆时也会判断是否已经记住密码,所以在验证时也会进行判断:

class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">



还有一步,就是当我们退出时,我们需要在退出中调用我们的记住密码服务,进而进行退出登陆:

class="org.springframework.security.web.authentication.logout.LogoutFilter">











还有一个过滤器要配置,就是我们的异常过滤器(ExceptionTranslationFilter):

class="org.springframework.security.web.access.ExceptionTranslationFilter">




class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">



class="org.springframework.security.web .access.AccessDeniedHandlerImpl">


终于配置完成了,咱们是可以把这个项目运行起来的,先不说这个,书中给了我们两个选择,一个是security命名空间,一个是明确的bean定义,那么如何选择呢:

。。 我整理了一下这个项目,现在是可以跑起来的,而且使用mysql进行了集成。 不用那个hsql了,我觉得看起来可能会好一点。
下载地址:http://download.csdn.net/detail/dulei294948/6312707


推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
author-avatar
一代天骄的小男人_580
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有