項目需要 CAS配置后只能配置一個地址 要么外網(wǎng)要么內(nèi)網(wǎng) 很不方便,也不能滿足項目需要 ,所以對項目做了相應的調(diào)整
關于CAS與Shiro的集成這樣就不說明了,一般在集成的過程中 都把地址在寫固定在配置文件中,所以需要根據(jù)用戶請求判定用戶來自內(nèi)網(wǎng)還是外網(wǎng)怖竭。
1.找到shiro-web-1.2.2.jar包里的org.apache.shiro.web.filter.AccessControlFilter重寫redirectToLogin方法
public static Map<String, String> hostPort = new HashMap<String, String>();
protected void redirectToLogin(ServletRequest servletRequest,
ServletResponse response) throws IOException {
String loginUrl = getLoginUrl();
//重寫URL
final HttpServletRequest request = (HttpServletRequest) servletRequest;
//獲取配置信息
Map<String, String> config = CustomConfigUtil.getCustomConfig(null, (HttpServletRequest) request);
hostPort = config;
loginUrl = config.get("casServerTicketUrl")+"/login?service="+config.get("client")+"/cas";
WebUtils.issueRedirect(request, response, loginUrl);
}
2.CAS和Shiro集成后 需要自己重寫一個realm 繼承CasRealm 重寫 doGetAuthenticationInfo方法
在方法第一行增加重新賦值巩那。
setCasServerUrlPrefix(AccessControlFilter.hostPort.get("casServerTicket"));
setCasService(AccessControlFilter.hostPort.get("client")+"/cas");
總結(jié):該方式能解決集成后內(nèi)外網(wǎng)訪問的問題 不過算不上好的方式眉反。
CustomConfigUtil 工具具體在http://www.reibang.com/p/0a86a376e897中有介紹。