`
Kenny.Lee
  • 浏览: 514848 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

整合Acegi使用HTTPS安全通道(SSL)

    博客分类:
  • J2EE
阅读更多
首先在你使用application server上激活SSL,让项目能使用HTTPS。

下面以我使用的tomcat为例(其实网上也很多了,再啰嗦一遍方法):

1、生成及导入证书。

生成keystore

keytool -genkey -alias projectName -keypass changeit -storepass changeit -keyalg RSA -validity 3600 -dname "CN=127.0.0.1, OU=HOME, O=HOME" -keystore my.keystore

导出证书

keytool -export -alias projectName -file foo.cer -keystore my.keystore

导入证书到cacerts(注意该cacerts确保是你application server所使用的JDK的)

keytool -import -alias projectName -keystore cacerts -file foo.cer -trustcacerts

2、配置tomcat的 server.xml文件。
大概找到下面注释的一行。

    <!-- Define a SSL HTTP/1.1 Connector on port 8443
         This connector uses the JSSE configuration, when using APR, the 
         connector should be using the OpenSSL style configuration
         described in the APR documentation -->


把这行下面注释的代码去掉,如下:

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
	           enableLookups="false" disableUploadTimeout="true" keystorePass="changeit"
               maxThreads="150" scheme="https" secure="true"  minSpareThreads="25"
               clientAuth="false" sslProtocol="TLS" />



留意changeit字段,需要跟之前生成证书时输入的密码一致。

3、重启tomcat。

测试 https://localhost:8443 是否访问正常。


让项目同时使用http和https

完成以上操作后,项目已经可以使用SSL来访问了,但也众所周知SSL之所以安全性比较高因为使用安全通道加密的缘故。所以原来http的一个请求和响应在https里面都变成几个,资源消耗大很多。所以我们有时候仅仅是为了一些资源使用https足以,并不是全部。

如果你是使用Acegi(spring security)的话,集成将非常简单。

具体配置如下:

打开acegi的配置文件。

1、找到exceptionFilter一段,具体代码如下:

	<!-- 处理登录异常或权限异常的Filter -->
	<bean id="exceptionFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">
		<!-- 出现AuthenticationException时的登录入口 -->
		<property name="authenticationEntryPoint">
			<bean
				class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
				<property name="loginFormUrl"
					value="${exceptionFilter.AuthException.loginFormUrl}" />
				<!-- in order to enable the https -->
				<property name="forceHttps" value="true" />
			</bean>
		</property>
		<!-- 出现AccessDeniedException时的Handler -->
		<property name="accessDeniedHandler">
			<bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
				<!-- 指定错误页面	-->
			</bean>
		</property>
	</bean>


留意把forceHttps的值设置为true。

2、配置channelDecisionManager

添加如下代码:
	<bean id="channelDecisionManager"
		class="org.acegisecurity.securechannel.ChannelDecisionManagerImpl">
		<property name="channelProcessors">
			<list>
				<ref bean="secureChannelProcessor" />
				<ref bean="insecureChannelProcessor" />
			</list>
		</property>
	</bean>

	<bean id="secureChannelProcessor" class="org.acegisecurity.securechannel.SecureChannelProcessor" />
	<bean id="insecureChannelProcessor"
		class="org.acegisecurity.securechannel.InsecureChannelProcessor" />


3、配置ChannelProcessingFilter,让我们仅对需要的SSL的资源使用https。

	<bean id="channelProcessingFilter" class="org.acegisecurity.securechannel.ChannelProcessingFilter">
		<property name="channelDecisionManager" ref="channelDecisionManager" />
		<property name="filterInvocationDefinitionSource">
			<value>
				PATTERN_TYPE_APACHE_ANT
				/admin/**=REQUIRES_SECURE_CHANNEL
				/**=REQUIRES_INSECURE_CHANNEL   
            </value>
		</property>
	</bean>

(例子中为访问/admin/**资源的的时候必须使用https,若用http访问的时候也会直接转到https通道。其他资源可使用https也可以使用http。)

顾名思义:
REQUIRES_SECURE_CHANNEL 为使用https
REQUIRES_INSECURE_CHANNEL 为使用http

/** 注意请务必放在最后

另:请注意项目中的url地址,因为如果在https链接当中访问http资源的话,某些时候会出现问题,例如获取session和request之类的时候,实质上是从https进行了Redirect,而且还是那比较难查错。


使用acegi的话,应该配置过FilterSecurityInterceptor,相信格式也很熟悉了吧。

4、勿忘在FilterChainProxy添加新的filter
	<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
		<property name="filterInvocationDefinitionSource">
			<value>
				CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
				PATTERN_TYPE_APACHE_ANT
				/**=sessionIntegrationFilter,logoutFilter,authenticationFilter,rememberMeFilter,channelProcessingFilter,exceptionFilter,securityInterceptor
			</value>
		</property>
	</bean>


注意添加上channelProcessingFilter即可。

至此,已经可以享受Acegi在安全性上给我们带来的便利以及乐趣。

但实话说,有些情况下使用Acegi却带来很多的麻烦,或者是必须深入了解,不然扩展性和易用性还是有限。
1
0
分享到:
评论

相关推荐

    acegi安全策略与CAS整合

    AceGI安全策略与CAS(Central Authentication Service)整合是企业级应用中常见的安全解决方案,它能够为Web应用程序提供统一的身份验证和授权服务。本文档旨在详细阐述这一整合过程,包括配置步骤、所需资源以及...

    Acegi Security整合CAS实例

    通过上述详细步骤的介绍,开发者可以了解到如何从零开始配置SSL环境、整合CAS Server与Acegi Security,最终实现安全且高效的单点登录解决方案。这种整合方案在企业级应用中尤为常见,对于提高应用的安全性和便捷性...

    spring acegi 使用工程demo

    这个"spring acegi 使用工程demo"显然是一个示例项目,旨在帮助开发者理解和实践如何在Spring应用中集成和使用Acegi安全框架。 首先,Acegi是Spring Security的前身,后来被Spring Security所取代,但它的概念和...

    acegi+cas整合工程及说明3

    将acegi和cas的war包修改并整合测试,里面包含所需依赖包。经过分卷压缩一共3个文件.

    acegi安全框架简介

    它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。 安全涉及到两个不同的概念,认证和授权。前者是关于...

    Acegi-spring安全框架

    Acegi-Spring安全框架是一个专为基于Spring的企业应用设计的安全框架,现在被称为Spring Security。它提供了声明式的安全访问控制,允许开发者在Spring容器中配置安全相关的Bean,利用Spring的依赖注入(IoC)和面向...

    Acegi框架介绍 acegi安全与认证

    【Acegi框架介绍 acegi安全与认证】 Acegi Security,现称为Spring Security,是一个强大的安全框架,主要用于基于Spring...通过深入理解和使用Acegi(Spring Security),开发者能够构建出更安全、更健壮的应用程序。

    Acegi使用.pdf

    Acegi安全框架通过一系列关键组件来实现这些功能,同时它还具备高度的灵活性,可以与各种认证机制(如容器认证、CASSSO、X509等)进行整合,以适应不同的应用场景。 #### Acegi的关键组件 Acegi安全系统由多个关键...

    acegi使用说明acegi原理及如何与spring、hibernate结合

    它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。 安全涉及到两个不同的概念,认证和授权。前者是关于...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架

    它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。通过精心 配置Acegi安全系统能够轻松地适用于复杂的安全需求。它既能应用于WEB应用也能应用于非WEB应用。在 ...

    acegi应用安全J2EE安全

    Acegi Security是Spring社区早期开发的一个安全框架,用于增强J2EE应用程序的安全性。这个框架在Spring Security(之前称为Acegi Security)的后续版本中得到了发展和改进,成为了Spring生态中的核心组件。本文将...

    acegi

    Acegi 是一个在Java开发领域,特别是Spring框架中曾经广泛使用的安全组件,全称为Acegi Security。这个系统为Spring应用程序提供了全面的安全管理解决方案,包括身份验证、授权、会话管理以及安全事件处理等功能。...

    acegi的使用

    Acegi 使用 Servlet 过滤器来保护 Web 应用,通过身份认证和授权来确保系统的安全性。该框架利用了 Spring 框架的依赖注入和面向切面编程(AOP)特性,使得安全功能可以独立于应用代码,降低了安全性和业务逻辑之间的...

    权限Acegi的使用

    5. **测试和调试**:进行充分的测试以确保安全配置正确无误,可以使用Acegi提供的安全测试工具来辅助调试。 随着Spring Security的出现,虽然Acegi不再维护,但其设计理念和模式在Spring Security中得到了延续和...

    使用acegi控制用户权限实例

    Acegi Security是Spring框架早期的一个安全模块,它提供了全面的基于Spring的应用程序的安全管理功能。在本实例中,我们将深入探讨如何使用Acegi来控制用户的权限。Acegi Security已经被Spring Security替代,但其...

    acegi安全框架例子

    4. **频道安全**:Acegi提供了对HTTP通道的安全控制,确保敏感数据通过HTTPS传输,防止数据在传输过程中被窃取。 5. **过滤器链**:Acegi基于Spring的过滤器链机制,可以拦截和处理请求,执行身份验证和授权检查。...

    Acegi 数据库配置安全策略 源代码及图解

    - `security.jpg`可能是一个关于安全过滤器的图解,Acegi使用`SecurityContextHolder`来存储当前请求的认证信息,并通过一系列的过滤器(如`SecurityEnforcementFilter`)来检查访问权限。 - `...

    Acegi安全框架简介及实用扩展

    Acegi安全框架简介及实用扩展,spring acegi 权限管理

    使用Acegi作为基于Spring框架的WEB应用的安全框架

    Acegi Security,现已被Spring ...结合"acegi-sample.war"和"实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架.pdf",开发者可以更好地理解和掌握Acegi Security的使用方法,从而提升Web应用的安全性。

Global site tag (gtag.js) - Google Analytics