方法一:在应用项目中修改web.xml,增加授权区。
web.xml:
<!-- 所有链接自动跳转到https -->
以上这种方式,会导致在IE中无法下载xls\swf等文件,但在firefox中没有问题
方法二:是在用户登录时,用acegi配置处理,强制使用https
项目中的welcome file:index.jsp跳转至一个不允许匿名访问的地址,index.jsp如下列:
而在验证配置中,允许匿名(未登录)访问的只有login.jsp
所以用户在未登录情况下所进行的连接均会经过exceptionTranslationFilter
因为[color=red]forceHttps=true[/color],所以会直接连接到https的登录界面,登录后将会一直使用的是http连接
此种情况只有在用户登录后,又手动输入http连接的情况下无法跳转至https
此种方式在用户登录后的页面中如果存在非https的链接,IE可能会提示下列信息:
“是否只查看安全传送的网页内容?网页包含的内容将不使用安全的https连接传送,可能危及到整个网页的安全”
遇到上述IE的提示时,对IE进行以下设置即不会再出现提示:
在IE中选择“工具”-->"Internet选项"-->“安全”-->“自定义安全级别”-->在“其他”分类里找到“显示混合内容”选“启用”即可。(可参见附件)
web.xml:
<!-- 所有链接自动跳转到https -->
<security-constraint>
<web-resource-collection>
<web-resource-name>sslapp</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
以上这种方式,会导致在IE中无法下载xls\swf等文件,但在firefox中没有问题
方法二:是在用户登录时,用acegi配置处理,强制使用https
项目中的welcome file:index.jsp跳转至一个不允许匿名访问的地址,index.jsp如下列:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<script>
function redirect() {
self.location='menu/homepage.jsp';
}
redirect();
</script>
</head>
</html>
而在验证配置中,允许匿名(未登录)访问的只有login.jsp
<bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="accessDecisionManager">
<bean class="org.acegisecurity.vote.UnanimousBased">
<property name="allowIfAllAbstainDecisions" value="true"/>
<property name="decisionVoters">
<list>
<ref local="authService"/>
<bean class="org.acegisecurity.vote.AuthenticatedVoter"/>
</list>
</property>
</bean>
</property>
<property name="objectDefinitionSource">
<value>
<!-- CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON-->
PATTERN_TYPE_APACHE_ANT
/login.jsp=IS_AUTHENTICATED_ANONYMOUSLY
/**=IS_AUTHENTICATED_REMEMBERED
</value>
</property>
</bean>
所以用户在未登录情况下所进行的连接均会经过exceptionTranslationFilter
<bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">
<property name="authenticationEntryPoint">
<bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
<property name="loginFormUrl" value="/login.jsp"/>
<property name="forceHttps" value="true"/>
</bean>
</property>
<property name="accessDeniedHandler">
<bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
<property name="errorPage" value="/403.jsp"/>
</bean>
</property>
</bean>
因为[color=red]forceHttps=true[/color],所以会直接连接到https的登录界面,登录后将会一直使用的是http连接
此种情况只有在用户登录后,又手动输入http连接的情况下无法跳转至https
此种方式在用户登录后的页面中如果存在非https的链接,IE可能会提示下列信息:
“是否只查看安全传送的网页内容?网页包含的内容将不使用安全的https连接传送,可能危及到整个网页的安全”
遇到上述IE的提示时,对IE进行以下设置即不会再出现提示:
在IE中选择“工具”-->"Internet选项"-->“安全”-->“自定义安全级别”-->在“其他”分类里找到“显示混合内容”选“启用”即可。(可参见附件)