在http请求的页面如果有type=password的input框,Firefox的控制台有如下提示: Password fields present on an insecure (http://) page. This is a security risk that allows user login credentials to be stolen.
为了解决这个问题,要使用https请求。用到了google code下的struts的ssl插件 struts2-ssl-plugin-1.2.1.jar
strtus.xml 中部分配置:
<constant name="struts2.sslplugin.httpsPort" value="8443"/>
<constant name="struts2.sslplugin.annotations" value="true"/>
<package name="login-default" extends="ssl-default">
<interceptors>
<interceptor name="aInterceptor" class="com.dib.system.interceptor.A" /> <interceptor-stack name="loginStack">
<interceptor-ref name="secure">
<param name="httpPort">8443</param>
<param name="useAnnotations">false</param>
</interceptor-ref>
<interceptor-ref name="aInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="loginStack" />
<global-results>
<result name="noLogin" type="redirect">login.do</result>
</global-results>
</package>
<package name="statisticData" extends="ssl-default" namespace="/">
<action name="countSysMessage" class="homeInfoSettingAction" method="countSysMessage"/>
</package>
login-default中,因为有其它拦截器,需要显示的声明使用了secure拦截器,这里useAnnotations设置为false表示所有继承了该包下的方法将被重定向为https. 如果为true, 则标记了@Secured的方法才重定向为https.
StatisticData中,直接继承了ssl-default, 将使用constant中的默认设置,annotations为true, 标记了@Secured的方法才重定向为https.
测试时发现一个现象:如果用https访问继承了ssl-default但未标记为@Secured的方法,将无法访问。