Shiro: shrio的登录拦截

新手上路,请多包涵

问题描述

项目以前使用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

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 3.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题