spring boot+shiro+vue前后端分离时,获取不到session
生活随笔
收集整理的這篇文章主要介紹了
spring boot+shiro+vue前后端分离时,获取不到session
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
登錄成功后,獲取用戶對(duì)應(yīng)的菜單樹(shù),結(jié)果報(bào)錯(cuò)session失效。
controller:
| @ApiOperation("用戶登錄")
@ApiImplicitParams({@ApiImplicitParam(value = "用戶名", name = "username",defaultValue = "系統(tǒng)管理",dataType = "String",paramType="query"),@ApiImplicitParam(value = "密碼", name = "password",defaultValue = "C06F8860A055",dataType = "String",paramType="query"),@ApiImplicitParam(value = "驗(yàn)證碼", name = "captcha",defaultValue = "",dataType = "String",paramType="query")})
@PostMapping("/api/login")
public Result login(String username, String password,String captcha){Map<String,Object> map = new HashMap<>();try {if(StringUtils.isBlank(username)||StringUtils.isBlank(password)||StringUtils.isBlank(captcha)){return Result.fail(902,"username或password或captcha不能為空");}if(captcha.length()<120){return Result.fail(903,"驗(yàn)證碼不正確");}String tokenValidate = rfgcglMapper.tokenValidate(username, captcha);if(StringUtils.isBlank(tokenValidate)){return Result.fail(903,"驗(yàn)證碼不正確");}UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, password);Subject subject = SecurityUtils.getSubject();//完成登錄subject.login(usernamePasswordToken);Rfgcgl rfgcgl = rfgcglMapper.selectOne(new QueryWrapper<Rfgcgl>().eq("YHMC", username).eq("YHKL", password));map.put("user",rfgcgl);return Result.ok(map);}catch (Exception e) {String ex = e.getClass().getName();if (ex != null) {if (UnknownAccountException.class.getName().equals(ex)) {return Result.fail(904,"用戶名不存在");} else if (IncorrectCredentialsException.class.getName().equals(ex)) {return Result.fail(905,"賬戶或密碼錯(cuò)誤");} else {return Result.fail(906,"登錄失敗");}}return Result.fail(901,"登錄失敗");}
} ? @ApiOperation("動(dòng)態(tài)菜單") @PostMapping("/menu/tree") public Result menuTree(){Map<String,Object> map = new HashMap<>();try {String username = (String) SecurityUtils.getSubject().getPrincipal(); // 獲取當(dāng)前登錄用戶if(null==username){return Result.fail(902,"登錄已失效");}Rfgcgl user = new Rfgcgl().selectOne(new QueryWrapper<Rfgcgl>().eq("YHMC", username));if(null==user){return Result.fail(903,"用戶不存在");}List<Integer> list = roleMenuMapper.getMenuByRole(user.getRoleid());List<RFMenu> menus = menuMapper.getMenusByIds(list);List<RFMenu> rfMenus = menuUtil.parseMenuTree(menus);map.put("data",rfMenus);return Result.ok(map);}catch (Exception e){e.printStackTrace();return Result.fail(901);} } |
攔截器:
| @SuppressWarnings("unchecked") @Bean public FilterRegistrationBean corsBean() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration config = new CorsConfiguration();config.setAllowCredentials(true);config.addAllowedOrigin("*");config.addAllowedHeader("*");config.addAllowedMethod("*");source.registerCorsConfiguration("/**", config);FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));bean.setOrder(0);bean.setEnabled(enableCors);return bean; } |
解決辦法:后臺(tái)代碼沒(méi)有問(wèn)題,需要在前端代碼每次發(fā)送請(qǐng)求時(shí)添加??axios.defaults.withCredentials = true 這段代碼.
總結(jié)
以上是生活随笔為你收集整理的spring boot+shiro+vue前后端分离时,获取不到session的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SQL server判断字符串是否包含某
- 下一篇: html5倒计时秒杀怎么做,vue 设