`
234390216
  • 浏览: 10239136 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462908
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1776032
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398774
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395164
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680181
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:531168
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1185081
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:468868
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151503
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68355
社区版块
存档分类
最新评论

Spring Security(01)——初体验

阅读更多


       首先我们为Spring Security专门建立一个Spring的配置文件,该文件就专门用来作为Spring Security的配置。使用Spring Security我们需要引入Spring SecurityNameSpace

<beans xmlns="http://www.springframework.org/schema/beans"

  xmlns:security="http://www.springframework.org/schema/security"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://www.springframework.org/schema/beans

          http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

          http://www.springframework.org/schema/security

          http://www.springframework.org/schema/security/spring-security-3.1.xsd">

       

</beans>

 

       Spring Security命名空间的引入可以简化我们的开发,它涵盖了大部分Spring Security常用的功能。它的设计是基于框架内大范围的依赖的,可以被划分为以下几块。

Ø  Web/Http 安全:这是最复杂的部分。通过建立filter和相关的service bean来实现框架的认证机制。当访问受保护的URL时会将用户引入登录界面或者是错误提示界面。

Ø  业务对象或者方法的安全:控制方法访问权限的。

Ø  AuthenticationManager:处理来自于框架其他部分的认证请求。

Ø  AccessDecisionManager:为Web或方法的安全提供访问决策。会注册一个默认的,但是我们也可以通过普通bean注册的方式使用自定义的AccessDecisionManager

Ø  AuthenticationProviderAuthenticationManager是通过它来认证用户的。

Ø  UserDetailsService:跟AuthenticationProvider关系密切,用来获取用户信息的。

 

       引入了Spring SecurityNameSpace之后我们就可以使用该命名空间下的元素来配置Spring Security了。首先我们来定义一个http元素,security只是我们使用命名空间的一个前缀。http元素是用于定义Web相关权限控制的。

   <security:http auto-config="true">

      <security:intercept-url pattern="/**" access="ROLE_USER"/>

   </security:http> 

 

       如上定义中,intercept-url定义了一个权限控制的规则。pattern属性表示我们将对哪些url进行权限控制,其也可以是一个正则表达式,如上的写法表示我们将对所有的URL进行权限控制;access属性表示在请求对应的URL时需要什么权限,默认配置时它应该是一个以逗号分隔的角色列表,请求的用户只需拥有其中的一个角色就能成功访问对应的URL。这里的“ROLE_USER”表示请求的用户应当具有ROLE_USER角色。“ROLE_”前缀是一个提示Spring使用基于角色的检查的标记。

       有了权限控制的规则了后,接下来我们需要定义一个AuthenticationManager用于认证。我们先来看如下定义:

   <security:authentication-manager>

      <security:authentication-provider>

         <security:user-service>

            <security:user name="user" password="user" authorities="ROLE_USER"/>

            <security:user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN"/>

         </security:user-service>

      </security:authentication-provider>

   </security:authentication-manager>

 

       authentication-manager元素指定了一个AuthenticationManager,其需要一个AuthenticationProvider(对应authentication-provider元素)来进行真正的认证,默认情况下authentication-provider对应一个DaoAuthenticationProvider,其需要UserDetailsService(对应user-service元素)来获取用户信息UserDetails(对应user元素)。这里我们只是简单的使用user元素来定义用户,而实际应用中这些信息通常都是需要从数据库等地方获取的,这个将放到后续再讲。我们可以看到通过user元素我们可以指定user对应的用户名、密码和拥有的权限。user-service还支持通过properties文件来指定用户信息,如:

   <security:user-service properties="/WEB-INF/config/users.properties"/>

       其中属性文件应遵循如下格式:

username=password,grantedAuthority[,grantedAuthority][,enabled|disabled]

       所以,对应上面的配置文件,我们的users.properties文件的内容应该如下所示:

#username=password,grantedAuthority[,grantedAuthority][,enabled|disabled]

user=user,ROLE_USER

admin=admin,ROLE_USER,ROLE_ADMIN

 

       至此,我们的Spring Security配置文件的配置就完成了。完整配置文件将如下所示。

<beans xmlns="http://www.springframework.org/schema/beans"

  xmlns:security="http://www.springframework.org/schema/security"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://www.springframework.org/schema/beans

          http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

          http://www.springframework.org/schema/security

          http://www.springframework.org/schema/security/spring-security-3.1.xsd">

 

   <security:http auto-config="true">

      <security:intercept-url pattern="/**" access="ROLE_USER"/>

   </security:http>    

  

   <security:authentication-manager>

      <security:authentication-provider>

         <security:user-service>

            <security:user name="user" password="user" authorities="ROLE_USER"/>

            <security:user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN"/>

         </security:user-service>

      </security:authentication-provider>

   </security:authentication-manager>

       

</beans>

 

       之后我们告诉Spring加载这个配置文件。通常,我们可以在web.xml文件中通过context-param把它指定为Spring的初始配置文件,也可以在对应Spring的初始配置文件中引入它。这里我们采用前者。

   <context-param>

      <param-name>contextConfigLocation</param-name>

   <param-value>/WEB-INF/config/applicationContext.xml,/WEB-INF/config/spring-security.xml</param-value>

   </context-param>

  

   <listener>

   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

   </listener>

 

       Spring的配置文件是通过对应的ContextLoaderListener来加载和初始化的,上述代码中的applicationContext.xml文件就是对应的Spring的配置文件,如果没有可以不用配置。接下来我们还需要在web.xml中定义一个filter用来拦截需要交给Spring Security处理的请求,需要注意的是该filter一定要定义在其它如SpringMVC等拦截请求之前。这里我们将拦截所有的请求,具体做法如下所示:

   <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.xml文件中配置好了所有的请求都需要“ROLE_USER”权限,所以当我们在请求主页的时候,Spring Security发现我们还没有登录,Spring会引导我们到登录界面。使用正确的用户名和密码(如上面配置的user/useradmin/admin)登录后,如果符合对应的权限我们就可以访问主页了,否则将出现403(禁止访问)界面。

       可能你会奇怪,我们没有建立上面的登录页面,为什么Spring Security会跳到上面的登录页面呢?这是我们设置httpauto-config=”true”Spring Security自动为我们生成的。

       当指定http元素的auto-config=”true”时,就相当于如下内容的简写。

   <security:http>

      <security:form-login/>

      <security:http-basic/>

      <security:logout/>

   </security:http>

       这些元素负责建立表单登录、基本的认证和登出处理。它们都可以通过指定对应的属性来改变它们的行为。

 

 

(注:本文是基于Spring Security3.1.6所写)

(注:原创文章,转载请注明出处。原文地址:http://elim.iteye.com/blog/2154299

  • 大小: 3.8 KB
17
4
分享到:
评论
14 楼 sunwang810812 2017-05-16  
为楼主点赞
13 楼 mrzhanghao 2017-03-05  
4.o版本中
<security:http auto-config="true">
              <security:intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
       </security:http>需要加上hasRole
12 楼 Xuxiheng 2016-01-10  
hangzhoujava 写道
同时分享一个中文文档 也是超级全面 http://www.mossle.com/docs/auth/html/index.html

非常不错,感谢分享!
11 楼 whlt20090509 2016-01-07  
写得真好!受教了!感谢楼主
10 楼 hangzhoujava 2016-01-04  
同时分享一个中文文档 也是超级全面 http://www.mossle.com/docs/auth/html/index.html
9 楼 hangzhoujava 2016-01-04  
好定西,希望楼主不断更新以后内容
8 楼 234390216 2015-12-10  
gongzhibo0509 写道
感谢楼主分享,希望尽快更新。

前段时间太忙了,一直没有更新。最近好点,会陆续更新。
7 楼 gongzhibo0509 2015-12-01  
感谢楼主分享,希望尽快更新。
6 楼 zi_xiaobang 2015-10-08  
      
5 楼 NO8128 2015-08-21  
讲的很仔细了,很好,  让Spring Security的novice也能看明白
4 楼 bravefc 2015-04-10  
文章写的很好,讲述了springSecurity最基本的用法,很清晰。
3 楼 tyb1222 2014-12-05  
感谢分享!
2 楼 234390216 2014-11-30  
CoderDream 写道
感谢分享,楼主能否贴一个Maven版的项目出来?!

写该系列博客时是有建立一个基于Maven的Spring Security应用进行测试的。但是它不是一个完整的应用,而是使用svn控制的一些零零碎碎的功能验证的这么一个过程,所以对应的项目就不贴出来了。另外如果每篇文章都贴出对应时段的源码应用,我觉得也没有必要,因为核心的内容都已经在博文中提到了。
1 楼 CoderDream 2014-11-30  
感谢分享,楼主能否贴一个Maven版的项目出来?!

相关推荐

    Spring Security 资料合集

    这三份资料——"实战Spring Security 3.x.pdf"、"Spring Security 3.pdf" 和 "Spring Security使用手册.pdf" 将深入探讨这些概念,并提供实践指导,帮助读者掌握如何在实际项目中应用Spring Security。通过学习这些...

    spring Security3中文教程,经典的

    ### Spring Security3中文教程知识点概览 #### 一、安全核心概念与起步 Spring Security是Spring框架中的一个重要组成部分,主要用于为Web应用提供安全防护。它不仅提供了强大的认证和授权功能,还支持各种加密...

    springboot项目——基于springSecurity实现的前后端分离的企业级人事管理系统

    通过SpringBoot的便捷性和SpringSecurity的强大安全特性,配合Vue.js的前端交互能力,可以构建出一个既满足业务需求又具备良好用户体验的系统。对于开发者来说,这样的项目实践有助于提升对前后端分离架构的理解,...

    SpringBoot集成Spring Security登录管理 添加 session 共享【完整源码+数据库】

    我们将基于给定的标签——SpringBoot、SpringSecurity、mysql、session共享和idea来构建一个完整的示例。 首先,SpringBoot是一个轻量级的Java框架,它简化了创建独立的、生产级别的基于Spring的应用程序。通过内置...

    单点登录SSO解决方案之SpringSecurity+JWT实现.docx

    ### 单点登录SSO解决方案之SpringSecurity+JWT实现 #### 一、单点登录(SSO)概述 单点登录(Single Sign-On,简称SSO)是一种认证机制,允许用户仅通过一次登录就能访问同一域下的多个应用程序和服务。这种机制...

    spring-security-core-3.1.0.RC1.jar

    在本篇文章中,我们将深入探讨Spring Security的核心库——`spring-security-core-3.1.0.RC1.jar`,以及它在安全领域的应用。 一、Spring Security简介 Spring Security是一款提供全面身份验证、授权和安全访问...

    SpringSecurity 中文

    通过以上章节的内容概述,我们可以看出Spring Security不仅提供了强大的安全防护功能,同时也考虑到了用户体验的重要性。开发者可以根据项目的实际需求灵活配置,从而构建出既安全又友好的应用程序。

    spring security3配置和使用

    Spring Security3 引入了一种新的配置方式——命名控件配置(Named Controls Configuration),这种方式简化了安全配置的过程。在使用传统的 Spring Bean 配置时,开发者往往需要手动实现许多类来完成认证和授权逻辑...

    Spring.Security.3.1

    6. **记住我功能**:Spring Security支持“记住我”功能,允许用户在一段时间内无需再次登录,增强了用户体验。 7. **OAuth2集成**:Spring Security 3.1加强了与OAuth2的集成,允许应用作为OAuth2的资源服务器、...

    考试类精品--前后端分离模式,基于Spring Cloud、Vue的考试系统,使用Spring Security O.zip

    《构建基于Spring Cloud和Vue的前后端分离考试系统——深度解析Spring Security》 在现代Web开发领域,前后端分离已经成为主流架构模式,它能够有效提高开发效率,优化用户体验。本项目是一个考试系统的实现,采用...

    Jsf整合三大框架及Spring Security

    在这个项目中,JSF将与三大框架——Spring、Hibernate和PrimeFaces进行深度整合,以实现更高效、更灵活的应用开发。 1. **Spring框架整合** Spring是Java企业级应用开发的核心框架,提供了依赖注入(DI)、面向切面...

    spring-security-3.1.3.RELEASE

    《Spring Security 3.1.3.RELEASE:构建安全的Java Web应用》 Spring Security是Java平台上一个强大的安全框架,广泛应用于构建企业级的Web应用程序。这个版本——3.1.3.RELEASE,是该框架的一个稳定版本,为开发者...

    sample-gateway-oauth2login:结合了Spring Cloud Gateway和Spring Security OAuth2的示例应用程序

    《Spring Cloud Gateway与Spring Security OAuth2整合应用详解》 在当今的微服务架构中,Spring Cloud Gateway作为一款强大的API网关,广泛应用于服务路由、过滤器处理和安全控制等方面。而Spring Security OAuth2...

    SpringBlogSystem——基于Spring Boot的博客系统.zip

    该项目使用了Spring框架,Spring Boot,Spring mVC,Spring Data,Spring Security等技术,结合MySQL数据库,Hibernate框架,Elasticsearch进行开发。用户界面采用了Thymeleaf模板引擎,配合JavaScript,JQuery,...

    spring-framework-reference

    《Spring 框架详解——基于“spring-framework-reference”参考文档》 在Java开发领域,Spring框架无疑是最具影响力和广泛使用的轻量级框架之一。它以其强大的功能、灵活的设计和丰富的生态系统,成为了企业级应用...

    spring5.1.8.zip

    Spring 5.1.8版本是这个成熟框架的一个稳定发行版,提供了许多改进和新特性,以增强开发体验和应用性能。在这个版本中,Spring团队继续致力于提供更好的支持、性能优化和兼容性更新。 1. **依赖注入(Dependency ...

    最新版spring-framework-4.3.10.RELEASE-dist完整包

    2. **AOP(面向切面编程)**:Spring的AOP模块提供了面向切面的编程实现,允许开发者定义“切面”——一组相关的操作,如日志记录、事务管理等,这些操作可以在多个点(即“切入点”)自动应用。 3. **MVC(Model-...

    注册表单spring MVC+hibernate+spring+easyui

    【注册表单实现详解——基于Spring MVC、Hibernate、Spring及EasyUI】 在现代Web应用开发中,使用MVC(Model-View-Controller)架构模式能够有效地分离业务逻辑、数据模型和用户界面,提高代码的可维护性和可扩展性...

Global site tag (gtag.js) - Google Analytics