前后端分离导致session无效的解决方法


主要在于get、post提交时参数的问题

get提交

 

post提交

后端:

package com.cn.isoubu.website.filter;

import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.cn.isoubu.website.util.HttpUtils;

import net.sf.json.JSONObject;

public class AuthorityInterceprot implements HandlerInterceptor {

    private static final Logger logger = LoggerFactory.getLogger(AuthorityInterceprot.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler) throws Exception {
        HandlerMethod methodhandler = (HandlerMethod) handler;
        // 方法
        Method method = methodhandler.getMethod();
        String url = request.getHeader("Origin");
        if (!StringUtils.isEmpty(url)) {
            response.setHeader("Access-Control-Allow-Origin", url);
            response.setHeader("Access-Control-Allow-Credentials", "true");
        }
        // 获取方法上的 是否 需要校验权限
        Authority authority = method.getAnnotation(Authority.class);
        if (authority != null && StringUtils.isNotBlank(authority.module())
                && StringUtils.isNotBlank(authority.behavior())) {
            // 模块
            String module = authority.module();
            // 行为
            String behavior = authority.behavior();
            String token = (String) request.getSession().getAttribute("token");
            if (StringUtils.isBlank(token)) {
                logger.info("AuthorityInterceprot token is null");
                writeToAjaxClient(response, "{\"code\":4004,\"msg\":\"请重新登录\",\"result\":\"\"}");
                return false;
            }
            // 校验是否有此操作权限
            JSONObject verifyMsg = HttpUtils.verify(token, module, behavior);
            if (verifyMsg == null) {
                logger.info("AuthorityInterceprot verifyMsg is null");
                writeToAjaxClient(response, "{\"code\":4005,\"msg\":\"接口调用异常\",\"result\":\"\"}");
                return false;
            } else {
                if ((Integer) verifyMsg.get("status") == 0) {// 没有权限
                    logger.info("AuthorityInterceprot HttpUtils.verify error,msg:{}"
                            + verifyMsg.get("msg"));
                    writeToAjaxClient(response, verifyMsg.toString());
                    return false;
                }
            }
        }
        return true;
    }

    /**
     * 功能描述: <br>
     * 〈功能详细描述〉
     * 
     * @param response
     * @param jsonObject
     * @return
     * @throws IOException
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    private void writeToAjaxClient(HttpServletResponse response, String jsonObject)
            throws IOException {
        String contentType = "application/json";
        response.setContentType(contentType);
        PrintWriter out = response.getWriter();
        out.flush();
        out.print(jsonObject);
        out.flush();
        out.close();
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
            Object handler, Exception ex) throws Exception {
        // TODO Auto-generated method stub

    }

}

  后台需要设置:

response.setHeader("Access-Control-Allow-Origin", url);
response.setHeader("Access-Control-Allow-Credentials", "true");


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM