我想要的是完全的前后分离项目,感觉这个问题很复杂。
我准备做一个前后分离的后台管理系统,两个静态页面,一个登录,一个管理主页。
如果单用 Spring Security/Shiro 的话很简单,将页面写在应用里可以通过配置拦截器和 Controller 很轻松地进行有权限跳转管理主页,没权限的键入任何 URL 都会跳转至登录页直到有权限为止。
问题来了,如果做前后分离的话,页面是静态的,假如我用 Nginx 部署静态页面,那么在 URL 里键入静态页面文件名就能访问对应的页面。而我在后端用 Spring Security/Shiro 可以基于 JWT 来实现权限区分,带 Token 和不带 Token 两种情况。但是怎么和前端进行配合来进行权限跳转?
一些思考的结果:
1、Nginx 可以通过重写 URL 的方式来隐藏 .html 后缀。
2、可以通过登录页来提交登录申请,然后发送 JSON 给后端进行验证,验证成功可以通过 JavaScript 进行跳转,不成功就跳转到登录页,所以现在问题变成了怎么拦截未验证的请求? Nginx 有类似于拦截器这样的东西吗?
1
oh 2017-07-09 17:32:32 +08:00
这问题跟 nginx / url rewrite 无关…
|
2
jingniao 2017-07-09 17:34:54 +08:00 via Android
交给前端啊,碰到后端请求非法 403 401 之类就跳啊
|
3
ryd994 2017-07-09 18:47:21 +08:00 via Android 1
办法有很多
1. secure_link 限制所有请求带 token 2. 请求打到后端,后端不 server 静态文件,而用 X-accel-redirect 3. auth_request |
4
WispZhan 2017-07-09 19:16:43 +08:00
都前后端分离了,你后端还管理路由?
后端就只用 给接口和数据就行了。页面路由前端自己完成。 |
5
zzc1995217 OP |
6
guokeke 2017-07-09 19:43:51 +08:00 via Android
简单说就是,如果一个请求返回无权限,那么用 js 脚本直接跳对应的提示页面。
|
7
Ouyangan 2017-07-09 20:00:27 +08:00
后端全部都是 json 了, 不应该让后端 /nginx 来做 , 前端自己根据接收的状态码做相应的跳转 /提示.
|
8
porrat 2017-07-09 20:04:38 +08:00 via iPhone
oauth2
|
9
ryd994 2017-07-09 20:21:21 +08:00 via Android
@zzc1995217
secure_link 等于是 token 验证。token 就是签名,过时间会失效。具体怎么在后端嵌入,这要自己实现 X-accel-redirect 用法请自行 Google,一般就是个设置 header 的事 auth_request 这个也请自行 Google。简单来说,就是 Nginx 会往后端转发请求。只有后端 200 时才会返回静态文件的内容,否则认为没有权限,给 403。403 你也可以捕捉下来,跳去登录页。 |
11
wangxiaoer 2017-07-10 07:46:42 +08:00
这问题应该都有成熟的方案了吧,即使是静态页面,页面加载后(前)会向服务端发送一个请求检查当前用户身份,然后该继续继续,该跳转跳转,哪有这么复杂。
|