diff --git a/sa-token-demo-springboot/src/main/java/com/pj/CorsFilter.java b/sa-token-demo-springboot/src/main/java/com/pj/CorsFilter.java deleted file mode 100644 index 4a0cf1f6..00000000 --- a/sa-token-demo-springboot/src/main/java/com/pj/CorsFilter.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.pj; - -import java.io.IOException; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.stereotype.Component; - -/** - * 跨域过滤器 - * @author kong - */ -@Component -public class CorsFilter implements Filter { - - static final String OPTIONS = "OPTIONS"; - - @Override - public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) - throws IOException, ServletException { - HttpServletRequest request = (HttpServletRequest) req; - HttpServletResponse response = (HttpServletResponse) res; - // 获得客户端domain - String origin = request.getHeader("Origin"); - if (origin == null) { - origin = request.getHeader("Referer"); - } - // 允许指定域访问跨域资源 - response.setHeader("Access-Control-Allow-Origin", origin); - // 允许客户端携带跨域cookie,此时origin值不能为“*”,只能为指定单一域名 - response.setHeader("Access-Control-Allow-Credentials", "true"); - // 允许所有请求方式 - response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); - // 有效时间 - response.setHeader("Access-Control-Max-Age", "3600"); - // 允许的header参数 - response.setHeader("Access-Control-Allow-Headers", "x-requested-with,satoken"); - // 允许的header参数 -// response.setHeader("Access-Control-Allow-Headers", "*"); - - // 如果是预检请求,直接返回 - if (OPTIONS.equals(request.getMethod())) { - System.out.println("=======================浏览器发来了OPTIONS预检请求=========="); - response.getWriter().print(""); - return; - } - - // System.out.println("*********************************过滤器被使用**************************2233"); - chain.doFilter(req, res); - } - - @Override - public void init(FilterConfig filterConfig) { - } - - @Override - public void destroy() { - } - -} diff --git a/sa-token-doc/doc/more/common-questions.md b/sa-token-doc/doc/more/common-questions.md index 336c3a3c..8683fa63 100644 --- a/sa-token-doc/doc/more/common-questions.md +++ b/sa-token-doc/doc/more/common-questions.md @@ -49,11 +49,6 @@ 可能是404了,SpringBoot环境下如果访问接口404后,会被重定向到`/error`,然后被再次拦截,如果是其它原因,欢迎加群反馈 -### 如何把权限精确搭到按钮级? -在登录时,把当前用户拥有的权限码一次性返回给前端,让前端进行判断,
-例如使用vue等框架可以这样写:``
-其中`arr`是当前用户拥有的权限码数组,`user:delete`是显示按钮需要拥有的权限码,`删除按钮`是用户拥有权限码才可以看到的内容 - ### 权限可以做成动态的吗? 权限本来就是动态的,只有jwt那种模式才是非动态的 diff --git a/sa-token-doc/doc/use/jur-auth.md b/sa-token-doc/doc/use/jur-auth.md index 90e94135..8763a95d 100644 --- a/sa-token-doc/doc/use/jur-auth.md +++ b/sa-token-doc/doc/use/jur-auth.md @@ -112,4 +112,24 @@ StpUtil.checkRoleOr("user:update", "user:delete"); ### 拦截全局异常 有同学要问,鉴权失败,抛出异常,然后呢?要把异常显示给用户看吗?**当然不可以!**
-你可以创建一个全局异常拦截器,统一返回给前端的格式,参考:[码云:GlobalException.java](https://gitee.com/sz6/sa-token/blob/master/sa-token-demo-springboot/src/main/java/com/pj/test/GlobalException.java) \ No newline at end of file +你可以创建一个全局异常拦截器,统一返回给前端的格式,参考:[码云:GlobalException.java](https://gitee.com/sz6/sa-token/blob/master/sa-token-demo-springboot/src/main/java/com/pj/test/GlobalException.java) + + +### 如何把权限精确搭到按钮级? +权限精确到按钮级的意思就是指:**权限范围可以控制到页面上的每一个按钮是否显示** + +思路:如此精确的范围控制只依赖后端已经难以完成,此时需要前端进行一定的逻辑判断 + +1. 在登录时,把当前账号拥有的所有权限码一次性返回给前端 +2. 前端将权限码集合保存在`localStorage`或其它全局状态管理对象中 +3. 在需要权限控制的按钮上,使用js进行逻辑判断,例如在`vue`框架中我们可以使用如下写法: +``` js + +``` +其中:`arr`是当前用户拥有的权限码数组,`user:delete`是显示按钮需要拥有的权限码,`删除按钮`是用户拥有权限码才可以看到的内容 + + +注意:以上写法只为提供一个参考示例,不同框架有不同写法,开发者可根据项目技术栈灵活封装进行调用 + +### 前端有了鉴权后端还需要鉴权吗? +**需要!前端的鉴权只是一个辅助功能,对于专业人员这些限制都是可以轻松绕过的,为保证服务器安全,无论前端是否进行了权限校验,后端接口都需要对会话请求再次进行权限校验!** diff --git a/sa-token-doc/doc/use/login-auth.md b/sa-token-doc/doc/use/login-auth.md index 3d48730c..08959c94 100644 --- a/sa-token-doc/doc/use/login-auth.md +++ b/sa-token-doc/doc/use/login-auth.md @@ -66,6 +66,6 @@ StpUtil.getTokenValue(); StpUtil.getTokenInfo(); ``` -有关TokenInfo参数详解,请参考:[参考:TokenInfo参数详解](/fun/token-info) +?> 有关TokenInfo参数详解,请参考:[参考:TokenInfo参数详解](/fun/token-info)