- 浏览: 1001924 次
文章分类
最新评论
-
18335864773:
很多公司项目 都在使用pageoffice 来操作word,e ...
用java生成word文档 -
Gozs_cs_dn:
请问下博主, 怎样将sitemesh3.xsd绑定 sitem ...
SiteMesh3配置 -
Rose_06:
springside4.0quick-start.bat报错原因 -
ilemma:
我也是刚参见工作啊,经理让自学这个,有些东西不太懂,能不能发个 ...
Apache Shiro在Web中的应用 -
shanbangyou:
你废了
程序员上班打酱油的方法
我几年前自己写过一个后台权限管理的东西,也是基于用户-角色-权限这样的结构,说实话代码结构写得不好,因为是硬编码的形式,虽然功能其实用起来还是挺好用的,用户、角色及权限的管理均可在后台轻松完成,但现在如果再用硬编码的形式写这样的系统就说不过去了。目前关于权限管理的java开源系统比较多,有的比较有名,有的不出名,比如像Spring Security就很出名,在权限管理方面做得也非常全面,子猴这篇文章也是对Spring Security做个简短介绍。
我以最新版的spring-security-3.0.2作为介绍对象,如果你了解Spring 2.0 Security的话,那就比较抱歉了,因为spring-security-3.0.2与2.0相比改动很大,在2.0中的一些配置拿到3.0几乎是行不通的,如果你还没有接触过spring,那么以下是其地址:
Spring官方网址:http://www.springsource.org/
spring-security下载地址:
http://static.springsource.org/spring-security/site/downloads.html
我以其自带的一个简单例子来介绍一下吧,因为这个例子配置不对的话极易报错(这个例子是个打包的War文件,但与文档中的又不一样,所以极易出错),我会对出现的错误给予出错原因及解决方法。
首先通过spring-security地址下载到最新版的spring-security-3.0.2.RELEASE.zip,然后解压开来,在解压开的目录dist中,你会看到如下一些文件:
看到spring-security-samples-tutorial-3.0.2.RELEASE.war了吗?我就以这个为例,把这个包拷贝到你Web服务器(如Tomcat)的webapps目录下,启动服务器后,会生成一个spring-security-samples-tutorial-3.0.2.RELEASE项目,可以把名字改短一点方便访问,比如我这里改名为:spring-security,这样通过http://127.0.0.1/spring-security可以直接访问了。
进入目录WEB-INF,可以看到如上的一些文件,其中,applicationContext-security.xml是权限控制配置文件,所有的权限控制都是在其中配置的,bank-servlet.xml是系统的上下文配置文件,可以在其中配置访问路径映射(类似于Struts-1.x中的struts-config.xml或struts-2.x中的struts.xml文件),也可以在其中进行一些装配等工作,属于spring级的,与安全配置没多大关系。
具体的文件内容我就不展示了,因为可以自己打开看,我这里只说要注意的一些地方:
1、在web.xml中的配置
服务启动时加载applicationContext-security.xml文件:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext-security.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>
你一定注意到了,这里的filter-class与Spring2.0的不同之处,如果你了解Spring2.0的话,的确,在Spring2.0中为:
<filter-name>acegiFilterChain</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
这就是3.0与2.0改变很大的一个地方,2.0用的为Acegi,后来Acegi嵌入到了Spring中,成为了Spring Security,所以包的路径也都改变了!
2、在applicationContext-security.xml中的配置
<http use-expressions=”true”>
<intercept-url pattern=”/secure/extreme/**” access=”hasRole(‘ROLE_SUPERVISOR’)”/>
<intercept-url pattern=”/secure/**” access=”isAuthenticated()” />
<!– Disable web URI authorization, as we’re using <global-method-security> and have @Secured the services layer instead
<intercept-url pattern=”/listAccounts.html” access=”isRememberMe()” />
<intercept-url pattern=”/post.html” access=”hasRole(‘ROLE_TELLER’)” />
–>
<intercept-url pattern=”/**” access=”permitAll” />
<form-login />
<logout />
<remember-me />
<!–
Uncomment to enable X509 client authentication support
<x509 />
–>
<!– Uncomment to limit the number of sessions a user can have –>
<session-management invalid-session-url=”/timeout.jsp”>
<concurrency-control max-sessions=”1″ error-if-maximum-exceeded=”true” />
</session-management>
</http>
上面这段是初用者比较容易出错的地方,这其实也是写这篇文章的主要原因之一,注意到第一行的黑体字:
<http use-expressions=”true”>
表示这里的配置可以使用一种表达式,这种表达式就是类似于isAuthenticated()这样的写法,在后面会看到与这种写法不一样但同样可以达到相同效果的写法。
intercept-url表示要拦截的url形式,比如
<intercept-url pattern=”/secure/**” access=”isAuthenticated()” />
表示根目录下的secure目录需要经过验证后才能访问的。
<form-login />是Spring Security自动为你生成的一个简陋的登录页面,即使你没有创建任何登录页面,当然你也可以修改,但不建议你修改,因为你可以不使用默认的,可以采用如下方式:<form-login login-page=’/ login.html’/>自定义一个登录页面。
其他的说明可以参考一个翻译的中文文档:
http://www.family168.com/tutorial/springsecurity3/html/ns-config.html
3、容易出错的地方
在上面的翻译文档(也是翻译自官方文档)或英文官方文档中,给出的与上面例子功能相似的说明大概是这样的:
<http auto-config='true'>
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
注意到与上面例子不同的地方了吗?
还是注意第一行,这回不是<http use-expressions=”true”>而是<http auto-config=’true’>了,而下面的配置
<intercept-url pattern=”/**” access=”ROLE_USER” />也与上面的写法不同,事实上如果是<http use-expressions=”true”>的话,这句access=”ROLE_USER”就是错的,正确的写法就应该为:hasRole(‘ROLE_USER’)。
这不得不说这是Spring Security的文档与例子不搭配的一个低级错误,因为当一个使用者在打开例子又看到文档说明时,他往往不知道这两者有何区别,就如同我刚使用的时候一样,我在使用<http use-expressions=”true”>的同时,将access=”ROLE_USER”这种写法也写了进来,结果可想而知,报了错!报错信息诸如:
org.apache.jasper.JasperException: java.lang.IllegalArgumentException: Failed to evaluate
expression ‘ROLE_SUPERVISOR’
就是说use-expressions这种表示法是不认识access=”ROLE_USER”这种写法的,另外,当使用了<http use-expressions=”true”>时,一定要在配置中至少有一个符合use-expressions的表示法,否则就会报类似如下错误:
org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Field or property
‘ROLE_SUPERVISOR’ cannot be found on object of type ‘org.springframework.security.web.access.
expression.WebSecurityExpressionRoot’
这个简单的配置例子大概就写这么多吧,最后说说我对Spring Security的看法,我个人觉得Spring Security的功能的确是很强大,考虑得也非常全面,几乎什么都想替使用者做完,但正是它的这点,我觉得倒是它的缺点,在我了解它并配置的过程中,我个人觉得是非常复杂繁琐的,而且它现在的文档支持也并不好,正如上面所看到的一样,文档与例子中的写法都不一致。事实上,使用者并不希望它什么都做到,比如它做的那个缺省登录页面,那个有意义吗?使用者比如我,其实就是希望一个很简单的权限判断,比如我打开某一个链接,然后你告诉我访问者有无权限访问,给我返回一个类似true或false的结果就够了!至于其他的事情,我是如何的处理后续过程并不用Spring Security操心的
评论
试一下标签
<shiro:lacksPermission name="权限名称">无审批权限</shiro:lacksPermission>
发表评论
-
SpringMVC使用@ResponseBody中文乱码
2012-03-31 11:45 3103Spring3.0 MVC @ResponseBody 的 ... -
spring mvc 3 上传文件
2012-03-30 16:31 1270spring mvc 支持web应用程序的文件上传功能,是由 ... -
解决 spring mvc 3.0 结合 hibernate3.2 使用<tx:annotation-driven>声明式事务无法提交的问题
2011-10-29 09:23 111651、问题复现 spring 3.0 + hiber ... -
基于Spring框架的Shiro配置
2011-10-26 15:39 3167一、在web.xml中添加shiro过滤器 < ... -
spring3 混合使用 XML 与注解(Annotation)进行 Bean 的配置
2011-10-21 17:34 3667设计 @Configuration 和 @Bean 的初衷,并 ... -
springMVC最佳实践-基于注解的Controller
2011-10-13 23:09 917在spring 2.5发布之后,基于注解的Controller ... -
springmvc3-hibernate-crud例子
2011-10-12 23:45 657http://java.dzone.com/articles/ ... -
ExtJS, Spring MVC 3 and Hibernate 3.5: CRUD例子
2011-10-12 23:45 1309http://loianegroner.com/2010/09 ... -
spring mvc3 annotation例子
2011-10-12 23:43 1893服务端数据到客户端1.返回页面,Controller中方法返回 ... -
Spring Web MVC框架学习笔记
2011-10-12 21:22 2241spring-framework-reference中文版摘录 ... -
Mastering Spring MVC 3中文版
2011-10-11 23:00 3211Mastering Spring MVC 3中文版 精通Sp ... -
基于Myeclipse9.1的spring3.1MVC开发搭建
2011-10-01 14:27 2014(1)配置基础装备。每个符合Java EE规范的web应用程 ... -
Spring Security 设置session
2011-04-02 15:26 3933使用SecurityContextHolder来偷窥登入帐号密 ... -
springsecurity的URL过滤和全局过滤
2011-03-31 15:55 4824springsecurity的URL过滤和全局过滤 最近有个需 ... -
SpringSide 3 中的 Struts 2
2011-03-03 18:01 923在SpringSide 3 中,使用的MVC框架是Struts ... -
springside 中 报 org.hibernate.MappingException: Unknown entity: XXX
2011-03-03 17:25 1256org.hibernate.MappingException: ... -
springside 迁移sqlserver数据库报错
2011-03-02 16:55 826报错信息: java.lang.AbstractMethodE ... -
使用SpringSide 3.1.4.3开发Web项目的全过程(上)
2011-03-01 17:41 1154http://www.blogjava.net/youxia/ ... -
MultiActionController绑定command
2007-06-03 08:56 2553dlpower: 一般只见到用SimpleFormContro ... -
Error creating bean with name
2007-06-02 10:07 2584org.springframework.beans.fac ...
相关推荐
5. **表达式式访问控制**:Spring Security 3.0引入了基于Spring EL(Expression Language)的访问控制,允许更灵活的权限表达式,如`hasRole('ROLE_ADMIN')`或`isFullyAuthenticated()`。 6. **异常处理**:当访问...
教程文档`教你使用_SpringSecurity_3.0_52页.pdf`会详细指导你如何一步步配置和使用Spring Security。它应该包含了配置文件的示例、如何集成到Spring应用中、如何创建自定义认证逻辑以及如何进行授权设置等内容。...
Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理。它为Web应用程序提供了全面的身份验证、授权和访问...在实际项目中,结合具体需求,正确配置和使用Spring Security,能有效提高应用程序的安全性。
这个是基于Spring的一个小例子 , 主要是为了帮助大家学习SpringSecurity和SpringMvc 和Mybatis3.0 1.SS不用再数据库建表 2.使用了SS提供的登录方式,在输入用户名和密码时,访问到服务器后台 3.判断如果是用户名是...
**Spring 3.0 REST 实例详解** 在现代Web开发中,REST(Representational State Transfer,表述性状态转移)已经成为构建API的首选架构风格。Spring框架,作为一个强大的Java企业级应用开发框架,从3.0版本开始就...
### Spring Security 3 配置详解 #### 一、引言 ...本文通过具体的例子详细介绍了如何配置Spring Security 3以实现动态权限管理。通过这种方式,可以有效地增强应用程序的安全性和灵活性,同时降低维护成本。
在Spring Security 3.0中,动态权限控制意味着权限和角色的分配可以通过数据库来实现,而不是硬编码在配置文件中。这提供了更大的灵活性,使得管理员可以在运行时更改用户的权限。 1. **权限实体**:在数据库中创建...
Spring Security 3.0.1 是基于 Spring Security 3.0 的一个 bug fix 版本,主要修复了 3.0 中已知的问题,并对文档中的一些拼写错误进行了修正。 ##### 1.4 如何获取 Spring Security - **项目模块**:Spring ...
- **内容:** 包含了一个简单的 Spring Security 应用程序示例,用于演示如何配置和使用 Spring Security。 **3.2 Contacts** - **内容:** 介绍如何在 Spring Security 中配置联系人管理功能。 **3.3 LDAP 例子**...
在SpringSecurity 3.1版本中,相比3.0版本,配置上有一些变化,但其核心仍然是通过一系列过滤器来实现安全控制。本文将详细介绍SpringSecurity的体系结构、配置以及在非数据库环境下进行安全保护的基本步骤。 1. **...
在这个例子中,我们聚焦于Spring框架的核心配置概念,以及如何在实际项目中进行设置。 首先,Spring的核心配置通常涉及到`beans.xml`或`applicationContext.xml`文件,这些XML文件定义了应用程序的bean及其依赖关系...
因此,如果是在新项目中实现权限控制,建议使用 Spring Security。 在提供的压缩文件“acegi”中,可能包含了 Acegi 框架的源码或示例代码,这将有助于你深入理解其内部工作原理和实现细节。你可以通过阅读这些源码...
Spring Security可以与Spring MVC无缝集成,通过注解和配置即可完成复杂的权限逻辑。 综上所述,过滤器在实现多层权限控制中起到了关键作用。它们可以独立地检查不同的安全条件,形成灵活的过滤链,确保系统的安全...
9. 全面介绍Spring:文档中提到本书是Spring的总体介绍,意味着书中不仅仅局限于Spring框架的某一部分,而是提供了全面的覆盖,包括了Spring的各个方面,比如Spring MVC、Spring Security、Spring Data、Spring Boot...
除了基本的登录检查,Filter还可以结合其他安全框架如Spring Security,实现更复杂的权限控制,比如角色授权、权限细粒度控制等。Spring Security提供了一套完善的权限管理机制,可以通过自定义Filter或者继承其提供...
2. 配置文件:在Spring Boot项目中,通常会有一个`application.properties`或`application.yml`文件,用于配置CAS客户端的相关参数,如CAS服务器的URL、服务验证端点、安全相关的属性等。 3. 登录与票证验证:当...
在Java代码中,使用Spring Security可以这样配置: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure...
在Flex中,可以使用SecurityModule来实现用户验证,而在Java后端,可以使用Spring Security等框架进行权限管理。 7. RESTful API:虽然本例主要使用了Remoting(AMF)通信,但现代Web应用也常采用RESTful API设计,...