vue+sprintboot 解決session為空問題

前端處理:

  1. 在request.js中添加如下代碼鹿蜀,允許跨域攜帶cookie
import axios from 'axios'
axios.defaults.withCredentials = true     // 添加代碼:允許跨域攜帶cookie
  1. 請求攔截添加token
service.interceptors.request.use(
  config => {
    if (store.getters.token) {
      //添加token到Header的Authorization中
      config.headers['Authorization'] = 'Bearer ' + getToken()
    }
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)

后端處理:

  1. 添加SessionInterceptor攔截器,來控制登錄的邏輯判斷
@Component
public class SessionInterceptor extends HandlerInterceptorAdapter {

    /**
     * @param request  請求對象
     * @param response 響應(yīng)對象
     * @param handler  前置對象
     * @return 返回false=攔截  返回true=繼續(xù)執(zhí)行請求
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        if ("OPTIONS".equals(request.getMethod())) {
            return true;
        }
        // session expire
        if (request.getSession(false) == null || request.getHeader("Authorization") == null) {
            response.sendError(HttpStatus.UNAUTHORIZED.value(), "登錄超時,請重新登錄");
            return false;
        }
        // validate token in session
        else if (request.getSession().getAttribute("token") != null) {
            String token = request.getHeader("Authorization");
            if (token.equals("Bearer " + request.getSession().getAttribute("token").toString())) {
                return true;
            } else {
                response.sendError(HttpStatus.UNAUTHORIZED.value(), "登錄令牌無效霸株,請重新登錄");
                return false;
            }
        }
        // invalid session
        else {
            response.sendError(HttpStatus.UNAUTHORIZED.value(), "登錄會話異常雕沉,請重新登錄");
            return false;
        }
    }
}
  1. 將攔截器注入到配置去件,并添加跨域處理
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    /**
     * SessionInterceptor 處理登錄邏輯判斷
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //白名單地址 注意:不要添加server.servlet.servcontext-path:的目錄
        List<String> excludeUrl = Arrays.asList("/user/login", "/error",
                "/webjars/**", "/swagger-resources/**", "/swagger-ui.html");

        registry.addInterceptor(new SessionInterceptor())
                // 這里用/**表示攔截所有請求
                .addPathPatterns("/**")
                // 排除白名單地址
                .excludePathPatterns(excludeUrl);
    }

    /**
     * 前后端跨域,解決session為空
     *
     * @return
     */
    @Bean
    public WebMvcConfigurer webMvcConfigurer2() {
        return new WebMvcConfigurer() {
            /**
             * 設(shè)置頭 使可以跨域訪問
             * @param registry
             * @since 4.2
             */
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("*")
                        .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
                        .maxAge(3600)
                        .allowCredentials(true);
            }
        };
    }
}
  1. 在登錄成功時設(shè)置session中的token并下發(fā)
@Autowired
private HttpSession session;

/**
 * 登錄
 */
public LoginVO login(LoginDTO dto) {
    User user = baseMapper.login(dto.getUsername());
    LoginVO loginVO = Optional.ofNullable(user).map(x -> {
        String slatPassword = SecureUtil.md5(dto.getPassword() + x.getSlat());
        if (!x.getPassword().equals(slatPassword)) {
            throw new AppException("用戶名或密碼錯誤");
        }
        LoginVO u = LoginVO.builder().build();
        BeanUtils.copyProperties(user, u);
        u.setRole(x.getRoleId().equals(1) ? "管理員" : "審計員");
        return u;
    }).orElseThrow(resolver("用戶名或密碼錯誤"));

    String token = UUID.randomUUID().toString();
    session.setAttribute("token", token);
    loginVO.setToken(token);
    return loginVO;
}

/*
 * api接口返回
 */
@ApiOperation(value = "用戶-登錄")
@PostMapping(value = "/login")
@UserLog(module = SystemLogModuleEnum.USER, type = "登錄")
public R login(@RequestBody @Valid LoginDTO loginDTO) {
    LoginVO loginVO = userService.login(loginDTO);
    return R.ok(loginVO);
}

使用 vue + springboot 前后端分離 跨域尤溜、cookie肠牲、session 問題靴跛,全套配置一篇就夠了
前后端分離 vue+springboot 跨域 session+cookie失效問題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缀雳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子梢睛,更是在濱河造成了極大的恐慌肥印,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绝葡,死亡現(xiàn)場離奇詭異深碱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)藏畅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門敷硅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愉阎,你說我怎么就攤上這事绞蹦。” “怎么了榜旦?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵幽七,是天一觀的道長。 經(jīng)常有香客問我溅呢,道長澡屡,這世上最難降的妖魔是什么猿挚? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮绩蜻,結(jié)果婚禮上辜羊,老公的妹妹穿的比我還像新娘八秃。我一直安慰自己昔驱,他們只是感情好骤肛,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布腋颠。 她就那樣靜靜地躺著淑玫,像睡著了一般絮蒿。 火紅的嫁衣襯著肌膚如雪土涝。 梳的紋絲不亂的頭發(fā)上但壮,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天蜡饵,我揣著相機(jī)與錄音验残,去河邊找鬼您没。 笑死氨鹏,一個胖子當(dāng)著我的面吹牛仆抵,可吹牛的內(nèi)容都是我干的镣丑。 我是一名探鬼主播莺匠,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼遥缕!你這毒婦竟也來了单匣?” 一聲冷哼從身側(cè)響起封孙,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤膜蠢,失蹤者是張志新(化名)和其女友劉穎糖荒,沒想到半個月后狂男,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蔑穴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年哑姚,在試婚紗的時候發(fā)現(xiàn)自己被綠了绞佩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖复罐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤嘹悼,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜峦失,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一吝镣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辉川,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澡腾。三九已至,卻和暖如春喇肋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工实柠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留登钥,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像掌唾,于是被迫代替她去往敵國和親撩扒。 傳聞我的和親對象是個殘疾皇子豪墅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容