问题描述
项目以前使用jeesite开发,现在想改写项目,但是旧的代码和方法不可以去掉。现在前端使用的是Vue,但是登录时,不会进入shiro的拦截器,而是会直接返回一个重定向请求,vue理所当然的会报错,请问现在的URL应该怎样写,或者说shiro应该怎样配置,才可以让
问题出现的环境背景及自己尝试过哪些方法
尝试过直接使用subject.login(token)登录并登录成功(在登录方法里subject.getPrincipal()不为空),但是再次进入其他方法时,subject.getPrincipal()方法得到的返回值却是null
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
原登录URL
/a/login
vue后台登录方法
@RequestMapping(value = "/sys/login",method = RequestMethod.POST)
public ResultVo userLogin(User user,HttpServletRequest request,HttpServletResponse response){
ResultVo pass = ApiResponseUtil.pass();
Subject subject = SecurityUtils.getSubject();
try {
UsernamePasswordToken token = new UsernamePasswordToken(user.getLoginName(),user.getPassword().toCharArray(),false,"","",false);
subject.login(token);
}catch (Exception e){
e.printStackTrace();
return ApiResponseUtil.unknowProblem(e);
}
if(subject.isAuthenticated()){
SystemAuthorizingRealm.Principal principal = (SystemAuthorizingRealm.Principal)subject.getPrincipal();
pass.setResult(principal);
return pass;
}else{
return ApiResponseUtil.fieldInvalid("","登录失败");
}
}
vue前台登录方法
function login(env, cb) {
return env.$http({
method: "post",
url: env.config.tam + "/rest/sys/login",
data: {
username: env.login.loginName,
password: env.login.password,
},
withCredentials: true,
}).then((resp) => {
var data = resp.data
if (data.code == 0) {
console.log(data.result)
env.$cookies.set("sessionid",data.result.sessionid)
env.$cookies.set("loginName",data.result.loginName)
return env.$router.push({path: "/tam/manager/list"})
}
else if (data.code == -6) {
return sendMail.apply(this, [env])
} else if (data.code == -5) {
throw{
type: "warning",
message: "用户不存在"
}fangfa
} else if (data.code == -8) {
env.displayValidateCode = true
env.$cookies.set("displayValidateCode", true, 5 * 30)
throw{
type: "warning",
message: data.message