`
嘎一下抽了
  • 浏览: 9827 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类

spring security 学习笔记(一)

    博客分类:
  • JAVA
阅读更多

运用spring security 首先应该在web.xml里加入一个过滤器

 

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

     我们添加了一个过滤器,他是调用Spring Security的入口。

DelegatingFilterProxy代表一个filter,这个filter其实是spring容器中的一个bean。例如上面的例子,那么Spring容器中就会有一个名为“springSecurityFilterChain”的bean。 这个bean是通过spring security标签创建的,负责处理web 安全。

     添加完上面的代码,接下来需要在spring的配置文件中运用<http>标签来配置spring security的业务。

 

<sec:http auto-config="true">
	 <sec:intercept-url pattern="/**" access="ROLE_USER"/>
</sec:http> 

     这段代码的意思是说,我们希望所有进入wen应用的连接都需要安全验证。并且只有是“ROLE_USER”角色的用户可以访问。<http>标签是root标签。<intercept-url>是<http>的子标签。<intercept-url>标签中有一个"pattern"属性,通过它的值来匹配进入web应用的连接请求。<intercept-url>标签中的access属性的值为访问控制限制。

 

     直接在配置文件里定义测试数据

 

<sec:authentication-manager>
	 <sec:authentication-provider>
	 	<sec:user-service>
	 		<sec:user name="aaa" password="AAA" authorities="ROLE_USER,ROLE_ADMIN"/>
	 		<sec:user name="bbb" password="BBB" authorities="ROLE_USER"/>
	 	</sec:user-service>
	 </sec:authentication-provider>
</sec:authentication-manager> 

     定义了两个用户分别是 aaa 和 bbb。也可以通过<sec:user-service>标签中的"properties"属性从一个properties文件中加载用户的信息。

     <authentication-provider>标签的作用指出定义的用户信息将会被authentication Manager使用,别且来处理认证请求。

     配置完这些就可以启动web应用,做登录请求了。上面的配置其实已经添加了一些安全业务处理,因为运用"auto-config"属性,例如简单的登录处理。

     auto-config 自动配置了一些设置,包括默认的登录界面、认证处理等。

 

  <http auto-config='true'>
    <intercept-url pattern="/**" access="ROLE_USER" />
  </http>

      上面的代码片段与下面的含义是一样的

 

 写道
<http>
<intercept-url pattern="/**" access="ROLE_USER"/>
<form-login />
<http-basic />
<logout />
</http>

 

     从上面的配置,我们不知道应该从哪个页面执行登录操作,没有提及任何html或JSP等页面。其实我们不需要指出一个具体的URL作为登录界面。Spring Security会自动生成一个登录界面。

     如果想任务请求都不受安全限制的话,可以把access的值设置成“IS_AUTHENTICATED_ANONYMOUSLY”,则请求将被安全机制忽视

    <form-login>标签的属性
  1. login-page:指向自定义的登录界面URL。
  2. default-target-url:登录后跳转的页面URL。
  3. always-use-default-target:登录后跳转的URL是否可用
    例如
<sec:form-login login-page="/login.jsp" default-target-url="/doahbord" always-use-default-target='true'/>
      应用其他的“Authentication Providers”

     authentication provider作用是将用户信息提供给 authentication manager进行用户认证的。有些时候我们需要更详细的用户信息,那么上面通过在配置文件中定义用户内容就不能满足我们要求。而且用户的信息存储不光只在配置文件中,用户信息可以存储在数据库或者LDAP Server中等。可以通过自定义一个实现接口“UserDetaislService”的类。例如:

 

  <authentication-manager>
    <authentication-provider user-service-ref='myUserDetailsService'/>
  </authentication-manager>

   上面的例子 “myUserDetailsService”是我们自定义的一个类。他负责将用户信息封装成UserDetails类。

 

   如果用户的信息是存储在数据库中,那么可以用下面的配置

 

  <authentication-manager>
    <authentication-provider>
      <jdbc-user-service data-source-ref="securityDataSource"/>
    </authentication-provider>
  </authentication-manager>

    “securityDataSource”是一个DataSource类型的bean。这个bean指向数据库,并且数据库中有标准的spring security用户tables。具体表结构可以通过spring官网查询。

 

   会话控制 session management

    检测session超时

    可以通过配置检测session超时并且将请求冲定向一个适当的URL。可以在配置文件里进行如下配置实现该功能

 

  <http>
    ...
    <session-management invalid-session-url="/invalidSession.htm" />
  </http>

    上面配置的session超时检测有些时候会报出一些不恰当的异常。例如当一个用户注销后又重新登录,但是整个过程没有关闭游览器,这是因为游览器的cookie中仍然存储着这个被废除的session。可以通过配置当注销的时候删除cookie中的session。如下:

 

  <http>
    <logout delete-cookies="JSESSIONID" />
  </http>
   单点登录控制

    如果你想应用支持单点登录,那么要在spring security框架外部做一些简单配置。

    首先要在web.xml里面加入一个listener

 

  <listener>
    <listener-class>
      org.springframework.security.web.session.HttpSessionEventPublisher
    </listener-class>
  </listener>

    然后再spring配置文件中加入下面代码

 

  <http>
    ...
    <session-management>
        <concurrency-control max-sessions="1" />
    </session-management>
  </http>

    这样就可以防止一个用户多次登录(用户第二次登录将会导致第一次登录会话失效)。如果想防止第二次登录可以做如下配     置,那么第二次登录就会失败,不会导致第一次登录的会话失效

 

  <http>
    ...
    <session-management>
        <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
    </session-management>
  </http>

    上面的配置会导致第二次会话被拒绝,如果是通过form-login的形式登录的话,那么请求就会被转发到认证失败的页面

 

 

    认证管理组件

    AuthenticationManager是spring security认证服务的主要接口。它通常是ProviderManager类的一个实例。AuthenticationManager是通过<authentication-manager>标签被注册到spring容器中的。

    AuthenticationManager通常是与AuthenticationProvider结合一起使用的。AuthenticationProvider可以通过<authentication-provider>标签注册到spring 容器中。代码如下

 

  <authentication-manager>
    <authentication-provider ref="casAuthenticationProvider"/>
  </authentication-manager>

  <bean id="casAuthenticationProvider"
      class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
    ...
  </bean>
分享到:
评论

相关推荐

    springsecurity学习笔记

    在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...

    spring security学习笔记

    spring security学习笔记

    SpringSecurity笔记,编程不良人笔记

    SpringSecurity是Java领域中一款强大的安全框架,主要用于Web应用程序的安全管理。它提供了全面的身份验证、授权、会话...通过深入学习和实践,我们可以更好地掌握SpringSecurity,为我们的应用构建坚固的安全防线。

    Spring Security OAuth2.0学习笔记.zip

    Spring Security OAuth2.0学习笔记 什么是认证、授权、会话。 Java Servlet为支持http会话做了哪些事儿。 基于session认证机制的运作流程。 基于token认证机制的运作流程。 理解Spring Security的工作原理,Spring ...

    spring security3笔记

    《Spring Security 3笔记》 在深入探讨Spring Security 3的知识点之前,我们先了解下这个框架的基本概念。Spring Security是Spring生态系统中的一个组件,它为Java应用提供了全面的安全服务,包括认证、授权以及Web...

    最详细Spring Security学习资料(源码)

    Spring Security是一个功能强大且高度可定制的身份验证和授权框架,专门用于保护Java应用程序的安全性。它构建在Spring Framework基础之上,提供了全面的安全解决方案,包括身份验证、授权、攻击防护等功能。 Spring...

    Spring Security 资料合集

    Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理,它为Web应用和企业级应用提供了全面的...通过学习这些文档,开发者可以更好地理解Spring Security的工作原理,从而更有效地实现应用的安全控制。

    Spring Security tutorial 学习笔记(一)

    在 `SpringSecurityTest01` 这个压缩包文件中,你可能找到了一个示例项目,它可能包含了配置类、控制器、视图和测试用例。通过分析这些代码,你可以更深入地理解如何在实际项目中应用 Spring Security。 总之,...

    Spring Security笔记.rar

    Spring Security 是一个强大的且高度可定制的框架,用于为Java应用程序提供身份验证和授权服务。它主要用于保护基于Spring的...通过学习本笔记,你可以逐步掌握Spring Security的基础知识,并将其运用到实际项目中。

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    Spring Security学习笔记(一)

    以上就是Spring Security 学习笔记的第一部分,涵盖了Spring Security的基本使用和内存认证配置。后续的学习中,你将接触到更高级的主题,如自定义认证提供者、权限控制、OAuth2集成等。继续深入学习,你将能够构建...

    spring security学习资料

    spring security方面的学习资料,包含:Spring+Security+3+与+CAS单点登录配置;Spring+Security3中文教程;Spring-Security安全权限管理手册;Spring+Security文库;还有一个学习笔记!

    狂神Spring Security静态资源

    Spring Security 是一个强大的安全框架,主要用于Java Web应用的安全管理,包括认证、授权和访问控制等。在Spring Boot中,Spring Security 提供了简洁的API和自动化配置,使得开发者能够快速集成安全功能。在这个名...

    SpringSecurity笔记2-SpringSecurity命名空间

    在"SpringSecurity笔记2-SpringSecurity命名空间"的学习中,还会涉及到如何自定义过滤器链,以及如何通过`&lt;custom-filter&gt;`元素插入自定义的SpringSecurity过滤器。同时,理解`&lt;access-denied-handler&gt;`和`...

    springsecurity3 学习笔记源码分析所得

    Spring Security 是一个强大的Java安全框架,用于...总的来说,Spring Security 3的学习笔记和源码分析对提升安全开发技能大有裨益,不仅可以加深理论理解,还能在实际项目中灵活运用,构建更加健壮、安全的应用系统。

    马士兵老师spring框架学习笔记

    马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...

    springSecurityTest.zip

    这个"springSecurityTest.zip"文件是一个IDEA(IntelliJ IDEA)与MAVEN项目,设计用于帮助初学者理解并入门Spring Security。下面将详细阐述Spring Security的主要概念和其在实际开发中的应用。 首先,Spring ...

    Spring_Security权限管理_学习笔记

    在本学习笔记中,我们将深入探讨Spring Security的核心概念和配置,以及如何设计数据库表来支持权限管理。 首先,Spring Security的配置始于Web应用的入口点——`web.xml`文件。在这里,我们需要定义一个名为`...

Global site tag (gtag.js) - Google Analytics