1.建立一个MyEclipse的WebProject,把下列jar文件拷贝到项目的WEB-INF/lib目录:
acegi-security-1.0.3.jar
spring2.0.jar
commons-codec-1.3.jar
2.修改WEB-INF下的web.xml文件,内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app>
- <display-name>acegi Example of liuyxit</display-name>
- <!--
- 定义应用的上下文参数,用于ContextLoaderListener
- -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- classpath:spring/applicationContext.xml
- </param-value>
- </context-param>
- <!--acegi 的filter链代理-->
- <filter>
- <filter-name>Acegi Filter Chain Proxy</filter-name>
- <filter-class>
- org.acegisecurity.util.FilterToBeanProxy
- </filter-class>
- <init-param>
- <param-name>targetClass</param-name>
- <param-value>
- org.acegisecurity.util.FilterChainProxy
- </param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>Acegi Filter Chain Proxy</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!--
- 装载应用软件的Spring上下文
- 要由WebapplicationContextUtils.getWebApplicationnContext(servletContext)得到.
- -->
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderListener
- </listener-class>
- </listener>
- </web-app>
<?xml version="1.0" encoding="UTF-8"?> <web-app> <display-name>acegi Example of liuyxit</display-name> <!-- 定义应用的上下文参数,用于ContextLoaderListener --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:spring/applicationContext.xml </param-value> </context-param> <!--acegi 的filter链代理--> <filter> <filter-name>Acegi Filter Chain Proxy</filter-name> <filter-class> org.acegisecurity.util.FilterToBeanProxy </filter-class> <init-param> <param-name>targetClass</param-name> <param-value> org.acegisecurity.util.FilterChainProxy </param-value> </init-param> </filter> <filter-mapping> <filter-name>Acegi Filter Chain Proxy</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 装载应用软件的Spring上下文 要由WebapplicationContextUtils.getWebApplicationnContext(servletContext)得到. --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app>
其中FilterChainProxy实现了filter接口,它主要是实例化FilterChainProxy,并把所有动作交由FilterChainProxy处理。这样简化了web.xml的配置,并且充分利用了Spring IOC管理Bean的优势。
3.在src目录右键新建一个resource folder,在下面再建立acegi和spring目录
在spring目录中创建applicationContext.xml文件,内容:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
- default-autowire="byName" default-lazy-init="true">
- <!-- ======================== FILTER CHAIN ======================= -->
- <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
- <property name="filterInvocationDefinitionSource">
- <value>
- CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
- PATTERN_TYPE_APACHE_ANT
- /**=authenticationProcessingFilter,exceptionTranslationFilter
- </value>
- </property>
- </bean>
- <!-- ======================== 认证filter ======================= -->
- <!-- 表单认证处理filter -->
- <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
- <property name="authenticationManager" ref="authenticationManager"/>
- <property name="authenticationFailureUrl" value="/acegilogin.jsp?login_error=1"/>
- <property name="defaultTargetUrl" value="/userinfo.jsp"/>
- <property name="filterProcessesUrl" value="/j_acegi_security_check"/>
- </bean>
- <!-- 认证管理器 -->
- <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
- <property name="providers"><!-- 可有多个认证提供器,其中一个证通过就可以了 -->
- <list>
- <ref local="daoAuthenticationProvider"/>
- </list>
- </property>
- </bean>
- <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
- <property name="userDetailsService" ref="inMemoryDaoImpl"/>
- </bean>
- <!-- 用户资料-->
- <bean id="inMemoryDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
- <property name="userMap">
- <value>
- liuyxit=123,ROLE_SUPERVISOR
- user1=user1,ROLE_USER
- user2=user2,disabled,ROLE_USER
- </value>
- </property>
- </bean>
- <!-- 异常处理filter -->
- <bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">
- <property name="authenticationEntryPoint">
- <bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
- <property name="loginFormUrl" value="/acegilogin.jsp"/>
- <property name="forceHttps" value="false"/>
- </bean>
- </property>
- <property name="accessDeniedHandler">
- <bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
- <property name="errorPage" value="/accessDenied.jsp"/>
- </bean>
- </property>
- </bean>
- </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd" default-autowire="byName" default-lazy-init="true"> <!-- ======================== FILTER CHAIN ======================= --> <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> <property name="filterInvocationDefinitionSource"> <value> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /**=authenticationProcessingFilter,exceptionTranslationFilter </value> </property> </bean> <!-- ======================== 认证filter ======================= --> <!-- 表单认证处理filter --> <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> <property name="authenticationManager" ref="authenticationManager"/> <property name="authenticationFailureUrl" value="/acegilogin.jsp?login_error=1"/> <property name="defaultTargetUrl" value="/userinfo.jsp"/> <property name="filterProcessesUrl" value="/j_acegi_security_check"/> </bean> <!-- 认证管理器 --> <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"> <property name="providers"><!-- 可有多个认证提供器,其中一个证通过就可以了 --> <list> <ref local="daoAuthenticationProvider"/> </list> </property> </bean> <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService" ref="inMemoryDaoImpl"/> </bean> <!-- 用户资料--> <bean id="inMemoryDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl"> <property name="userMap"> <value> liuyxit=123,ROLE_SUPERVISOR user1=user1,ROLE_USER user2=user2,disabled,ROLE_USER </value> </property> </bean> <!-- 异常处理filter --> <bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter"> <property name="authenticationEntryPoint"> <bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"> <property name="loginFormUrl" value="/acegilogin.jsp"/> <property name="forceHttps" value="false"/> </bean> </property> <property name="accessDeniedHandler"> <bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl"> <property name="errorPage" value="/accessDenied.jsp"/> </bean> </property> </bean> </beans>
[list=A]其中filterChainProxy就是由web.xml声明的filter(FilterToBeanProxy)的targetClass。它主要是装载filterInvocationDefinitionSource指定的filter类(例子中为authenticationProcessingFilter,exceptionTranslationFilter),并顺序调用它们的doFilter方法,进行安全服务处理。[/list]
[list=B]而authenticationProcessingFilter是处理一个认证表单,登陆用的表单必须提交用户名和密码这两个参数给这个filter.由用户名和密码构造一个UsernamePasswordAuthenticationToken,将传给AuthenticationManager的authenticate方法进行认证处理。该filter默认处理filterProcessesUrl属性指定的URL,认证失败会转到authenticationFailureUrl,认证成功会转到defaultTargetUrl页面。[/list]
[list=C]AuthenticationManager顾名思义认证管理器,它只有一个接口方法authenticate用于返回认证结果,他的实现类由多个AuthenticationProvider进行投票,决定认证是否通过。[/list]
[list=D]daoAuthenticationProvider是检验用户录入的认证数据是否正确(说白了就是用户名和密码是否正确)[/list]
[list=E]inMemoryDaoImpl是给daoAuthenticationProvider提供系统的用户资料。而资料的来源是从配置中装载到内存的。[/list]
[list=F]当认证不通过时,AuthenticationManager的实现类AbstractAuthenticationManager会抛出AuthenticationException类型的异常。这时排在最后的exceptionTranslationFilter会捕获该异常,并转向authenticationEntryPoint。[/list]
4.在WebRoot下创建index.jsp(其实不要也没关系,主要是为了方便),直接转向用户资料显示页。内容如下:
- <%@ page language="java" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
- <html>
- <head>
- <META HTTP-EQUIV="Refresh" CONTENT="0;URL=userinfo.jsp">
- </head>
- <body>
- <p>Loading ...</p>
- </body>
- </html>
<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <META HTTP-EQUIV="Refresh" CONTENT="0;URL=userinfo.jsp"> </head> <body> <p>Loading ...</p> </body> </html>
5.在WebRoot下创建userinfo.jsp,用于显示当前登陆的用户信息。内容如下
- <%@ page language="java" pageEncoding="UTF-8"%>
- <%@ page import="org.acegisecurity.context.SecurityContextHolder"%>
- <%@ page import="org.acegisecurity.userdetails.*"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>My JSP 'pass.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- </head>
- <body>
- 当前用户:
- <%
- Object obj = SecurityContextHolder.getContext().getAuthentication();
- if (null != obj){
- Object userDetail = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
- String username = "";
- if (userDetail instanceof UserDetails) {
- username = ((UserDetails) userDetail).getUsername();
- } else {
- username = userDetail.toString();
- }
- out.print(username);
- out.print("<br><a href=\"j_acegi_logout\">注销</a>");
- }else{
- out.print("当前没有有效的用户");
- out.print("<br><a href=\"acegilogin.jsp\">登陆</a>");
- }
- %>
- </body>
- </html>
<%@ page language="java" pageEncoding="UTF-8"%> <%@ page import="org.acegisecurity.context.SecurityContextHolder"%> <%@ page import="org.acegisecurity.userdetails.*"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'pass.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> 当前用户: <% Object obj = SecurityContextHolder.getContext().getAuthentication(); if (null != obj){ Object userDetail = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String username = ""; if (userDetail instanceof UserDetails) { username = ((UserDetails) userDetail).getUsername(); } else { username = userDetail.toString(); } out.print(username); out.print("<br><a href=\"j_acegi_logout\">注销</a>"); }else{ out.print("当前没有有效的用户"); out.print("<br><a href=\"acegilogin.jsp\">登陆</a>"); } %> </body> </html>
6.在WebRoot下创建acegilogin.jsp
- <%@ page language="java" pageEncoding="UTF-8"%>
- <%@ page import="org.acegisecurity.ui.AbstractProcessingFilter" %>
- <%@ page import="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter" %>
- <%@ page import="org.acegisecurity.AuthenticationException" %>
- <html>
- <head>
- <title>Login</title>
- </head>
- <body>
- <h1>Login</h1>
- <P>Valid users:
- <P>
- <P>username <b>liuyxit</b>, password <b>123</b> (supervisor)
- <P>username <b>user1</b>, password <b>user1</b> (normal user)
- <p>username <b>user2</b>, password <b>user2</b> (user disabled)
- <p>
- <%
- String strError = request.getParameter("login_error");
- if (null != strError){
- %>
- <font color="red">
- 你的登陆失败,请重试。<BR><BR>
- 原因: <%= ((AuthenticationException) session.getAttribute(AbstractProcessingFilter.ACEGI_SECURITY_LAST_EXCEPTION_KEY)).getMessage() %>
- </font>
- <%
- }//end if
- %>
- <form action="j_acegi_security_check" method="POST">
- <table>
- <tr><td>User:</td><td><input type='text' name='j_username' value='<%= session.getAttribute(AuthenticationProcessingFilter.ACEGI_SECURITY_LAST_USERNAME_KEY) %>'></td></tr>
- <tr><td>Password:</td><td><input type='password' name='j_password'></td></tr>
- <tr><td><input type="checkbox" name="_acegi_security_remember_me"></td><td>2周内自动登录</td></tr>
- <tr><td colspan='2'><input name="submit" type="submit"></td></tr>
- <tr><td colspan='2'><input name="reset" type="reset"></td></tr>
- </table>
- </form>
- </body>
- </html>
<%@ page language="java" pageEncoding="UTF-8"%> <%@ page import="org.acegisecurity.ui.AbstractProcessingFilter" %> <%@ page import="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter" %> <%@ page import="org.acegisecurity.AuthenticationException" %> <html> <head> <title>Login</title> </head> <body> <h1>Login</h1> <P>Valid users: <P> <P>username <b>liuyxit</b>, password <b>123</b> (supervisor) <P>username <b>user1</b>, password <b>user1</b> (normal user) <p>username <b>user2</b>, password <b>user2</b> (user disabled) <p> <% String strError = request.getParameter("login_error"); if (null != strError){ %> <font color="red"> 你的登陆失败,请重试。<BR><BR> 原因: <%= ((AuthenticationException) session.getAttribute(AbstractProcessingFilter.ACEGI_SECURITY_LAST_EXCEPTION_KEY)).getMessage() %> </font> <% }//end if %> <form action="j_acegi_security_check" method="POST"> <table> <tr><td>User:</td><td><input type='text' name='j_username' value='<%= session.getAttribute(AuthenticationProcessingFilter.ACEGI_SECURITY_LAST_USERNAME_KEY) %>'></td></tr> <tr><td>Password:</td><td><input type='password' name='j_password'></td></tr> <tr><td><input type="checkbox" name="_acegi_security_remember_me"></td><td>2周内自动登录</td></tr> <tr><td colspan='2'><input name="submit" type="submit"></td></tr> <tr><td colspan='2'><input name="reset" type="reset"></td></tr> </table> </form> </body> </html>
7.OK,发布项目,访问http://localhost:8080/acegiexample
这时index.jsp会自动转向userinfo.jsp,由于还没有用户登录,所以没有资料显示。按登陆链接进入登录页,登录成功后会看到显示用户名的页面(当然可以有更多的用户资料,但这仅仅是example),不成功时会在登录页提示信息。我们可以用user1和user2登陆,可以分别测试登录成功和失败的流程。
8.可以看到登录页上有自动登陆功能,而userinfo.jsp页有注销功能。但还是不起作用,好,现在我们马上首手加入这两个功能。看acegi可以方便到什么程度。修改applicationContext.xml如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
- default-autowire="byName" default-lazy-init="true">
- <!-- ======================== FILTER CHAIN ======================= -->
- <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy" >
- <property name="filterInvocationDefinitionSource" >
- <value >
- CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
- PATTERN_TYPE_APACHE_ANT
- /** =authenticationProcessingFilter,logoutFilter,rememberMeProcessingFilter,exceptionTranslationFilter
- </value>
- </property>
- </bean>
- <!-- ======================== 认证filter ======================= -->
- <!-- 表单认证处理filter -->
- <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
- <property name="authenticationManager" ref="authenticationManager"/>
- <property name="authenticationFailureUrl" value="/acegilogin.jsp?login_error=1"/>
- <property name="defaultTargetUrl" value="/userinfo.jsp"/>
- <property name="filterProcessesUrl" value="/j_acegi_security_check"/>
- </bean>
- <!-- 利用cookie自动登陆filter -->
- <bean id="rememberMeProcessingFilter"
- class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">
- <property name="authenticationManager"
- ref="authenticationManager"/>
- <property name="rememberMeServices" ref="rememberMeServices"/>
- </bean>
- <bean id="rememberMeServices"
- class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">
- <property name="userDetailsService" ref="inMemoryDaoImpl"/>
- <property name="key" value="javargb"/>
- </bean>
- <bean id="rememberMeAuthenticationProvider"
- class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
- <property name="key" value="javargb"/>
- </bean>
- <!-- 注销处理filter -->
- <bean id="logoutFilter" class="org.acegisecurity.ui.logout.LogoutFilter">
- <constructor-arg value="/acegilogin.jsp"/> <!-- URL redirected to after logout -->
- <constructor-arg>
- <list>
- <ref bean="rememberMeServices"/>
- <bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler"/>
- </list>
- </constructor-arg>
- </bean>
- <!-- 认证管理器 -->
- <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
- <property name="providers"><!-- 可有多个认证提供器,其中一个证通过就可以了 -->
- <list>
- <ref local="daoAuthenticationProvider"/>
- <ref local="rememberMeAuthenticationProvider"/>
- </list>
- </property>
- </bean>
- <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
- <property name="userDetailsService" ref="inMemoryDaoImpl"/>
- </bean>
- <!--
- <bean id="inMemoryDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
- <property name="userProperties">
- <bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
- <property name="location" value="classpath:acegi/users.properties"/>
- </bean>
- </property>
- </bean>
- -->
- <bean id="inMemoryDaoImpl"
相关推荐
2. **学习网址**:提供了一个适合初学者的基础教程,从零开始学习Acegi的用法和配置。这个网站可能包含了详细的教程、示例代码和常见问题解答,帮助你快速上手Acegi。 如果你在学习过程中遇到任何问题,可以通过...
### Acegi认证服务详解 #### 一、Acegi简介与背景 Acegi是Spring Security的前身,是一款基于Spring框架的安全管理工具,旨在为应用程序提供安全控制...希望本文能够为正在学习或使用Acegi的同学提供有价值的参考。
首先,"学习ACEGI - - New - JavaEye论坛.mht"可能是一个关于Acegi的入门教程,涵盖了Acegi的基本概念和如何在项目中引入Acegi。JavaEye论坛是一个知名的Java开发者社区,其中的帖子通常包含丰富的实践经验和问题...
Acegi 是一个在Java开发领域,特别是Spring框架中曾经广泛使用的安全组件,全称为Acegi Security。...学习Acegi可以帮助我们更好地理解Spring Security的工作原理,从而提升我们的应用安全开发能力。
通过学习Acegi,我们可以了解到Web应用安全的基本思路和实践方法,这对于理解现代的Spring Security框架非常有帮助。虽然Acegi已经不再更新,但它的理念和架构仍对现代安全框架设计产生深远影响。
"Acegi学习笔记.doc"可能包含个人学习Acegi的过程中积累的经验和技巧,这些笔记通常会涵盖实践中的问题解决和案例分析。笔记中可能包含了如何配置Acegi以保护特定的Spring Bean,以及如何定义自定义的权限表达式,...
通过深入学习Acegi,你可以了解Spring Security的基本架构和原理,这对于理解现代的Spring Security配置和使用非常有帮助。尽管Acegi已不再更新,但其思想和技术仍在Spring Security中得到沿用和发展。如果你正在...
"acegisample"可能是一个解压后的war文件内容,包含了Web应用的所有源代码和资源文件,方便开发者查看和学习Acegi和LDAP的集成方式。 通过这个实例,开发者可以学习如何配置Acegi的安全策略,如何在Spring应用中...
Acegi学习 Acegi是Spring Security的前身,它是一个强大且灵活的安全框架,用于Java企业级应用程序。在本文中,我们将深入探讨Acegi的...通过深入学习Acegi,开发者能够更好地掌握企业级应用中的安全性设计和实践。
学习Acegi不仅能够提升你的Java安全开发能力,也有助于理解Spring Security的底层原理,因为许多核心概念在Spring Security中依然保留。通过实践Acegi提供的例子,你可以更好地理解和掌握这些概念,从而在实际项目中...
`学习Acegi-认证(authentication).mht`文件可能详细讲解了Acegi的认证机制,包括基于内存、数据库、LDAP等不同源的身份验证策略。 总的来说,这个压缩包提供了全面的Acegi学习资源,涵盖了从基础概念到高级特性的...
学习acegi的第一步, <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> PATTERN_TYPE_APACHE_ANT /**=httpSessionContextIntegrationFilter,basicProcessingFilter,...
Acegi是Spring Security的前身,它是一个用于Java平台的安全框架,专为Spring应用程序设计。本教程将引导初学者逐步了解如何在实际项目中应用...同时,学习Acegi也能为理解和使用现代的Spring Security打下坚实的基础。
在本教程中,作者旨在帮助那些在学习Acegi过程中遇到困难的开发者,通过一步步的指导,使他们能够成功地将Acegi集成到实际项目中,并理解其核心配置和工作原理。 首先,Acegi的配置是其难点之一,因为涉及许多不同...
Acegi Security System for Spring 是一个历史悠久的Java安全框架,它...尽管Acegi已经被Spring Security所取代,但其核心理念和设计模式在现代安全框架中依然得到沿用,因此学习Acegi仍能提升你对Java安全体系的理解。
尽管如此,学习Acegi仍能帮助理解Spring Security的基础概念和设计模式,因为两者的核心思想是一致的。在实际开发中,建议使用最新版本的Spring Security,以获取更好的支持和更先进的安全特性。
在本实例中,我们将深入探讨如何使用Acegi进行权限管理,以及如何通过一个简单的项目来学习Acegi的核心功能。 首先,Acegi提供了一种灵活的方式来定义用户角色和权限,允许我们基于角色的访问控制(RBAC)。在这个...
Acegi安全框架是一款基于Spring AOP(面向切面编程)的高级安全认证和授权框架,它为Java应用程序提供了全面的安全管理...通过学习Acegi,开发者不仅可以提升应用的安全性,还能掌握面向切面编程在实际项目中的应用。
Acegi是Spring Security的前身,它是一个强大的、可...尽管Acegi已被Spring Security所取代,但其核心理念和使用方法在Spring Security中仍然得到延续,因此学习Acegi对于理解Spring Security的安全机制非常有帮助。
Acegi安全权限管理手册是一本全面介绍Acegi安全框架在...通过学习Acegi安全权限管理手册,开发者不仅可以掌握Acegi Security的使用,还能了解到安全设计的最佳实践,从而为开发更安全、健壮的应用程序打下坚实基础。