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

项目需要 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中有介绍。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容