_Cipher 2018-11-02 16:06 采纳率: 0%
浏览 2755
已结题

SpringSecurity+CAS 明明登录了,但是在corf跨域访问后台获取用户名,得到的总是匿名用户?

图片说明SpringSecurity+CAS 明明登录了,但是在corf跨域访问后台获取到的总是匿名用户 在不经过springSecurity的权限过滤器的时候 跨域是成功的 但是我需要获取到用户名 就加入了在其他与cas 连接的项目中登录了 可是就是获取不到用户名 都是 匿名用户. 在不加上面这句话的情况就出现了下图的错误  图片说明
但是从这个链接中点击进去 后项目又正常了一次 在刷新页面又要出错后点击链接才行 很烦 cas 和 springSecurity 的配置应该没有错误。。
不知道是不是 corf 的 preflight request 请求没有放行 csrf disable="true" 我也设置了

    能帮忙解决的发100红包  最好远程协助  拜托各位大佬
  • 写回答

2条回答

  • 玄尺 2018-11-03 06:16
    关注

    这种问题一般都比较好解决,但是如果你依赖这种框架反而不好搞了。
    异常显示你的请求跨域了,你在9105端口返回的页面上向9110发请求,浏览器肯定会禁掉你的请求,这应该不是spring security的问题。有可能是csrf的设置出现问题,
    解决方法,保持csrf检查关闭,并且告诉浏览器在9105端口返回的页面允许跨域。

    import javax.servlet.*;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /*** 处理跨域问题*/
    public class CrossDomainFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "POST, GET");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
            filterChain.doFilter(servletRequest, servletResponse);
        }
    
        @Override
        public void destroy() {
        }
    }
    

    核心就是在响应头添加跨域标识,至于拦截器用tomcat的filter还是spring的拦截器都可以。

    评论

报告相同问题?

悬赏问题

  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败