我的需求:Cas登录要求根据域名的不同做不同的登录认证方式:
1. 域名为:aaa.com,则要求cas登录页用用户名密码的方式认证
2. 域名为:bbb.com,则要求cas登录页用动态密码的方式认证
在mycas.properties文件中配置:
domainName:aaa.com
项目启动的时候,解析mycas.properties配置文件,获取domainName配置项,并放入上下文中,待casLoginView.jsp页面中读取该配置项以做不同的处理
这里,我用监听器的机制来实现。创建一个类实现ServletContextListener 接口,实现里面的contextInitialized和contextDestroyed方法。
public class WebContextListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
public void contextInitialized(ServletContextEvent servletContextEvent) {
try {
Class clazz = this.getClass();
String domainName = PropertyUtils.getValueByKey(clazz,
"xxx.properties", "domainName");
servletContextEvent.getServletContext().setAttribute("domainName", domainName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
解析读取properties配置文件,点击查看该文章
其中contextInitialized方法是项目在启动初始化的时候就会执行的方法,contextDestroyed是在消亡的时候执行的方法,这里我们需要把随项目启动时执行的代码放在contextInitialized方法中。
然后在web.xml中为这个监听器添加配置
<listener>
<listener-class> com.master.listener.WebContextListenerlistener-class>
listener>
其中listenner-class配置的是上面定义的监听器类的路径,这样就就可以了,部署好项目,启动就可以执行contextInitialized里面的代码了。
jsp页面中读取ServletContext中的数据,即,casLoginView.jsp页面
<div id="requestDomainName" name="<%=application.getAttribute("domainName")%>">div>
我是通过jquery的方式来获取id为requestDomainName的name的方式来获得domainName的(略渣,有更好的方法么,求教)
if(domainName == $("#requestDomainName").attr("name")) {
…
}
参考:http://blog.inet198.cn/?cb2474600377/article/details/44592617