CAS和Shiro集成后 需要内网外网访问的集成配置

项目需要 CAS配置后只能配置一个地址 要么外网要么内网 很不方便,也不能满足项目需要 ,所以对项目做了相应的调整
关于CAS与Shiro的集成这样就不说明了,一般在集成的过程中 都把地址在写固定在配置文件中,所以需要根据用户请求判定用户来自内网还是外网。

1.找到shiro-web-1.2.2.jar包里的org.apache.shiro.web.filter.AccessControlFilter重写redirectToLogin方法

public static Map hostPort = new HashMap();
    
    protected void redirectToLogin(ServletRequest servletRequest,
            ServletResponse response) throws IOException {
        String loginUrl = getLoginUrl();
        //重写URL
        final HttpServletRequest request = (HttpServletRequest) servletRequest;
        //获取配置信息
        Map 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中有介绍。

你可能感兴趣的