项目需要 CAS配置后只能配置一个地址 要么外网要么内网 很不方便,也不能满足项目需要 ,所以对项目做了相应的调整
关于CAS与Shiro的集成这样就不说明了,一般在集成的过程中 都把地址在写固定在配置文件中,所以需要根据用户请求判定用户来自内网还是外网。
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");
总结:该方式能解决集成后内外网访问的问题 不过算不上好的方式。
CustomConfigUtil 工具具体在http://www.jianshu.com/p/0a86a376e897中有介绍。
网友评论