【SpringBoot · Vue · Shiro · 前后端分离】关于登录认证后isAuthenticated依旧为false的问题

本文主要探讨在SpringBoot、Vue和Shiro结合的前后端分离项目中,遇到登录认证后isAuthenticated始终为false的问题。问题出现在前端组件配置、Shiro配置以及后端登录逻辑上。解决方案在于前端请求时携带sessionId,以便Shiro能正确保存登录状态。
摘要由CSDN通过智能技术生成

1 前 言

最近在使用 SpringBoot+Vue+Shiro 练习,但写到登录模块时,却遇到了 session 无法保存的问题,也就是前端提交登录请求后,后台通过 subject.login(usernamePasswordToken) 登录认证完响应给前端,但是前端想再请求后台判断是否登录时 (登录响应时我没有使用 Vuex 保存登录响应的数据) subject.isAuthenticated() 一直为 false

提示: 若你所遇到的情况与上述类似,请查看一下前端Vue组件是否配置以下代码,这样可以不耽误你的时间,因为本文最后的解决办法就是加入以下代码。而本文后面的代码及说明只是博主用来进行详细记录的。

//前端每次发送请求时就会带上 sessionId
axios.defaults.withCredentials = true
再次申明:请注意上面的提示,这将节省你的时间,如果你有兴趣,可以继续查看以下内容,以下还含有一些关于shiro的配置信息

2 具体情况

2.1 shiro 部分

AdminRealm.java: 自定义的realm,只做了认证,未实现授权

public class AdminRealm extends AuthorizingRealm {
   
    @Autowired
    private AdminService adminService;

    /**
     * 授权
     * @param principalCollection
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
   
        SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
        return simpleAuthorizationInfo;
    }

    /**
     * 获取认证信息,根据 token 中的用户名从数据库中获取密码、盐等并返回
     * @param authenticationToken
     * @return
     * @throws AuthenticationException
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
   
        String username = authenticationToken.getPrincipal().toString();
        Admin admin = adminService.getAdminByUsername(username);
        if (ObjectUtils.isEmpty(admin)) {
   
            throw new UnknownAccountException();
        }
        String passwordFromDB = admin.getPassword();
        String salt = admin.getSalt();
        SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(username, passwordFromDB, ByteSource.Util.bytes(salt), getName());
        return authenticationInfo;
    }
}

ShiroConfig.java: shiro 配置,因为没有做授权,这里的过滤器就没有配置

@Configuration
public class ShiroConfig {
   
    @Bean
    public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
   
        return new LifecycleBeanPostProcessor();
    }

    /**
     * Filter工厂,设置对应的过滤条件和跳转条件
     * @param securityManager
     * @return
     */
    @Bean
    public ShiroFilterFactoryBean shiroFilter<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值