前后端分离 ajax请求后台重定向

本文介绍了一种基于Token的前后端分离项目的登录验证方案。该方案利用Token进行身份验证,并通过自定义过滤器(filter)检查Token的有效性。文章还详细讨论了如何处理重定向问题,特别是针对Ajax请求的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做的一个前后端分离的一个项目,这就涉及到登录验证的问题。我用的是token加上filter。
1,前端请求登录的时候,用用户名和加上当前时间生成一个token,存入redis,然后返回给前端。
2,以后每次请求前端带上token,在filter里做验证。
3,判断token是否有效,有效则放行,无效则重定向到登录页面。
这就存在一个问题,ajax请求返回的json数据或者html.默认的是局部刷新页面。sendRedirect(“XXX”)重定向无效。
解决办法是前后台配合。
在filter里面加上如下
java
httpResponse.addHeader("REDIRECT", "REDIRECT");//告诉ajax这是重定向
httpResponse.addHeader("CONTEXTPATH", tokenUrl);//重定向地址

这时候响应头中就会出现如下两行这里写图片描述
然后前端代码如下:

$.ajaxSetup({
        complete : function(XMLHttpRequest, textStatus) {    
        // 通过XMLHttpRequest取得响应头,REDIRECT      
        var redirect = XMLHttpRequest.getResponseHeader("REDIRECT");//若HEADER中含有REDIRECT说明后端想重定向    
        alert(redirect);
        if (redirect == "REDIRECT") {  
            var win = window;      
            while (win != win.top){    
                win = win.top;    
            }  

            win.location.href= XMLHttpRequest.getResponseHeader("CONTEXTPATH");

        }  
    }
    });

ajaxSetup的使用方百度强调内容
网上大概也就是这些思路。但是还有一个坑,
XMLHttpRequest.getResponseHeader(“XXX”),通过CORS方式解决的ajax跨域,是获取不到请求头的。getResponseHeader的值一直为空。
要通过Access-Control-Expose-Headers来设置响应头的白名单。
httpResponse.addHeader(“Access-Control-Expose-Headers”, “REDIRECT,CONTEXTPATH”);将想要传递的字段设置一下。才能获取到值。

### Spring Boot 和 Vue 前后端分离项目的用户权限管理 在基于 Spring Boot 和 Vue 的前后端分离架构中,实现用户权限管理和页面配置通常涉及以下几个方面: #### 后端(Spring Boot) 1. **定义角色和权限模型** 使用数据库表来存储用户的权限信息。常见的设计包括 `User` 表、`Role` 表以及 `Permission` 表之间的多对多关系[^1]。 2. **集成 Spring Security** 配置 Spring Security 来保护 API 接口并验证请求中的身份认证令牌。通过自定义过滤器解析 JWT 或其他类型的 Token 并加载用户的角色和权限数据[^2]。 ```java @Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/api/public/**").permitAll() // 公开接口无需登录即可访问 .anyRequest().authenticated(); // 所有其它API都需要经过身份验证 } } ``` 3. **动态路由控制** 创建服务层逻辑,在每次前端请求菜单资源时返回当前用户可访问的 URL 列表及其对应的组件名称等元信息[^3]。 4. **JWT 认证机制** 当用户成功登录后生成 JSON Web Tokens (JWT),并将它作为后续 HTTP 请求头的一部分传递给服务器用于持续的身份确认过程[^4]。 #### 前端(Vue.js) 1. **安装依赖库** 安装 Axios 库处理跨域 AJAX 调用;Vuex 存储全局状态比如已登陆账户详情及有效期内 token 数据[^5]。 2. **初始化应用结构** 设置基础路径映射至不同视图文件夹下的子模块入口点,并预设好默认重定向目标位置[^6]。 3. **拦截未授权跳转行为** 添加导航守卫函数监听即将进入的新路由地址是否满足特定条件限制——即检查本地缓存是否存在合法 sessionKey 及其关联属性值范围内的允许操作集合成员资格测试结果为真才放行继续执行渲染动作序列[^7]。 4. **展示个性化界面布局** 根据后台推送过来的数据构建左侧栏树形目录样式列表项链接指向实际业务功能区板块内容区域显示效果呈现出来供最终使用者交互体验[^8]。 ```javascript // main.js 初始化部分代码片段演示样例 import router from './router'; import store from './store'; const app = createApp(App); app.use(router).use(store); router.beforeEach((to, from, next) => { const isAuthenticated = !!localStorage.getItem('token'); if (!isAuthenticated && to.name !== 'Login') { return next({ name: 'Login' }); } next(); }); app.mount('#app'); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值