`
1000
  • 浏览: 27371 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个简单的HelloWorld

阅读更多

在applicationContext.xml中使用Spring Security提供的命名空间进行配置。

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    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-2.0.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">①

    <http auto-config='true'>②
        <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />③
        <intercept-url pattern="/**" access="ROLE_USER" />
    </http>

    <authentication-provider>
        <user-service>
            <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />④
            <user name="user" password="user" authorities="ROLE_USER" />
        </user-service>
    </authentication-provider>

</beans:beans>
        

①声明在xml中使用Spring Security提供的命名空间。

②http部分配置如何拦截用户请求。auto-config='true'将自动配置几种常用的权限控制机制,包括form, anonymous, rememberMe。

③我们利用intercept-url来判断用户需要具有何种权限才能访问对应的url资源,可以在pattern中指定一个特定的url资源,也可以使用通配符指定一组类似的url资源。例子中定义的两个intercepter-url,第一个用来控制对/admin.jsp的访问,第二个使用了通配符/**,说明它将控制对系统中所有url资源的访问。

在实际使用中,Spring Security采用的是一种就近原则,就是说当用户访问的url资源满足多个intercepter-url时,系统将使用第一个符合条件的intercept-url进行权限控制。在我们这个例子中就是,当用户访问/admin.jsp时,虽然两个intercept-url都满足要求,但因为第一个intercept-url排在上面,所以Spring Security会使用第一个intercept-url中的配置处理对/admin.jsp的请求,也就是说,只有那些拥有了ROLE_ADMIN权限的用户才能访问/admin.jsp。

access指定的权限部分比较有趣,大家可以注意到这些权限标示符都是以ROLE_开头的,实际上这与Spring Security中的Voter机制有着千丝万缕的联系,只有包含了特定前缀的字符串才会被Spring Security处理。目前来说我们只需要记住这一点就可以了,在教程以后的部分中我们会详细讲解Voter的内容。

④user-service中定义了两个用户,admin和user。为了简便起见,我们使用明文定义了两个用户对应的密码,这只是为了当前演示的方便,之后的例子中我们会使用Spring Security提供的加密方式,避免用户密码被他人窃取。

最最重要的部分是authorities,这里定义了这个用户登陆之后将会拥有的权限,它与上面intercept-url中定义的权限内容一一对应。每个用户可以同时拥有多个权限,例子中的admin用户就拥有ROLE_ADMIN和ROLE_USER两种权限,这使得admin用户在登陆之后可以访问ROLE_ADMIN和ROLE_USER允许访问的所有资源。

与之对应的是,user用户就只拥有ROLE_USER权限,所以他只能访问ROLE_USER允许访问的资源,而不能访问ROLE_ADMIN允许访问的资源。

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext*.xml</param-value>
    </context-param>

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

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

</web-app>

 

 

admin.jsp

admin.jsp

 

index.jsp

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<div>username : <sec:authentication property="name"/></div>
<hr>
<a href="admin.jsp">admin.jsp</a>
<a href="j_spring_security_logout">logout</a>

 

user用户是无法访问/admin.jsp这个url资源的,user用户拥有ROLE_USER权限,但是/admin.jsp资源需要用户拥有ROLE_ADMIN权限才能访问,所以当user用户试图访问被保护的/admin.jsp时,Spring Security会在中途拦截这一请求,返回拒绝访问页面。

 

根据我们之前的配置,admin用户拥有ROLE_ADMIN和ROLE_USER两个权限,因为他拥有ROLE_USER权限,所以可以访问/index.jsp,因为他拥有ROLE_ADMIN权限,所以他可以访问/admin.jsp。

 

分享到:
评论

相关推荐

    一个简单的qt版helloworld程序

    本压缩包包含的“一个简单的qt版helloworld程序”是初学者接触Qt编程的一个基础示例,旨在帮助理解Qt的基本语法和项目构建过程。 首先,让我们来理解一下Qt中的"Hello, World!"程序的基本结构。在Qt中,我们通常会...

    Helloworld_helloworld_

    " 不仅是一个简单的输出语句,它代表了编程学习的起始点,是理解语言语法和控制流的基础。通过这个简单的例子,学习者可以逐步掌握更复杂的编程概念,并建立起编程思维。如果你正在尝试学习编程,从输出 "Hello, ...

    OpenWrt之helloworld程序

    在这个"OpenWrt之helloworld程序"中,我们将探讨如何在OpenWrt环境中编写、编译和运行一个简单的 HelloWorld 程序,这将帮助初学者了解OpenWrt的开发流程。 首先,`helloworld` 文件通常是一个C或C++源代码文件,...

    一个简单的hibernate helloworld

    【标题】"一个简单的hibernate helloworld"指的是在Java编程环境中使用Hibernate框架进行的初次实践,这个项目是为了帮助开发者快速理解并上手Hibernate。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发...

    一个简单的HelloWorld的mfc的程序

    标题中的"一个简单的HelloWorld的mfc的程序"是一个入门级别的示例,用于帮助初学者了解如何使用MFC来创建一个基本的Windows应用程序。 在MFC中,创建一个"Hello, World!"程序通常涉及以下步骤: 1. **设置项目**:...

    openwrt可用helloworld程序

    2. 编写源代码:在`src`目录下创建一个名为`helloworld.c`的C语言源文件,内容如下: ```c #include int main() { printf("Hello, World!\n"); return 0; } ``` 3. 配置Makefile:`Makefile`应包含以下内容,...

    JNI入门之HelloWorld(一)

    这里定义了一个名为`HelloWorld`的类,包含一个静态初始化块用于加载本地库,一个主方法用于启动程序,以及一个声明为native的方法`print`,该方法将在C/C++中实现。 ##### 2. 编译Java源码 使用`javac`命令编译`...

    一个helloWorld的简单插件代码

    本案例中,我们关注的是一个名为“helloWorld”的简单插件代码,它使用了HTML和JavaScript这两种核心技术。让我们深入了解一下这个插件的可能实现及其涉及到的知识点。 首先,HTML(HyperText Markup Language)是...

    汇编语言实现输出helloworld

    HelloWorld程序是程序员学习新编程语言时的第一个示例程序。它不仅简单易懂,而且能帮助初学者理解程序的基本结构和运行流程。通过实现HelloWorld程序,可以验证开发环境是否正确设置,并了解如何将简单的文本输出到...

    CXF的第一个例子helloWorld

    【标题】"CXF的第一个例子helloWorld"是一个基础教程,主要介绍了如何使用Apache CXF框架创建一个简单的Web服务。Apache CXF是一个开源的Java框架,它用于构建和开发Web服务,支持SOAP、RESTful等多种通信协议。这个...

    用Django创建一个hello world

    3. 创建应用:在项目目录中,运行`python manage.py startapp helloworld`,创建一个名为helloworld的应用。 现在,我们来编写实现"Hello, World!"功能的代码: 1. 打开`helloworld/views.py`文件,这是处理HTTP...

    linux环境下用makefile编译简单的helloworld程序

    在这个“linux环境下用makefile编译简单的helloworld程序”的主题中,我们将深入理解如何创建并使用`Makefile`来编译一个基本的C或C++程序,例如“helloworld”。 首先,`helloworld`程序是一个经典的入门示例,...

    一个HelloWorld界面程序例子

    然而,本例中的"HelloWorld"似乎更侧重于用户界面设计,这意味着它可能是一个带有图形用户界面(GUI)的应用程序,而不是简单的控制台程序。 【描述】提到的是一个与界面设计相关的"HelloWorld"程序。这表明我们将...

    ubuntu中编写第一个helloworld简单c语言程序_百度经验.pdf

    ubuntu中编写第一个helloworld简单c语言程序_百度经验.pdf

    Struts2的第一个实例helloworld

    本实例将引导我们逐步了解如何使用Struts2创建一个简单的“Hello, World!”程序。 首先,我们需要了解Struts2的基础架构。Struts2框架的核心组件包括Action类、配置文件(struts.xml)、拦截器(Interceptors)以及...

    Spring4 HelloWorld

    9. **运行和测试**:完成配置后,通过运行一个简单的Java程序,加载`ApplicationContext`,获取并调用`HelloWorld` Bean的方法,就能看到“Hello, Spring4!”这样的输出,从而验证配置是否正确。 10. **Spring的...

    HelloWorld_打印HelloWorld_

    这个"HelloWorld_"项目正是这样一个入门实例,用于在Visual Studio这个强大的集成开发环境中展示基本的代码编写和运行流程。 首先,让我们了解什么是Visual Studio。Visual Studio是由微软开发的一款全面的开发工具...

    android第一个程序hello world 的编写视频教程

    总的来说,"Hello World"教程是一个很好的起点,它让你熟悉Android Studio的基本操作,理解Java和XML在Android开发中的角色,以及如何构建简单的用户界面。随着你不断学习和实践,这些基础知识将成为你构建复杂应用...

    使用openWrt SDK开发第一个HelloWorld应用程序

    本文将详细介绍如何从源码编译 OpenWrt SDK,并使用该 SDK 开发并部署一个简单的 HelloWorld 应用程序。 #### 二、编译环境准备 为了确保编译过程顺利进行,首先需要设置一个合适的编译环境。本文中的编译环境为 ...

    深入淺出Hello World ( HackingHelloWorld-PartI)

    ### 深入淺出Hello World —— Hacking HelloWorld (Part I) #### 概述 在《深入淺出Hello World》这一系列文章中,作者Jim Huang(黃敬群/"jserv")通过深入剖析经典的“Hello World”程序,旨在帮助读者理解在...

Global site tag (gtag.js) - Google Analytics