下载地址:https://github.com/dromara/Sa-Token
使用文档:https://sa-token.cc/doc.html#/start/example
使用request.getRequestURI() 获取url:
更改com.pj.satoken.SaTokenConfigure#getSaServletFilter函数,
放行js后缀的路径和登录入口/acc/doLogin,其他的路径均需登录之后才能访问,
.addInclude("/**").addExclude("/**/*.js", "/acc/doLogin")
// 认证函数: 每次请求执行
.setAuth(obj -> {
// SaManager.getLog().debug("----- 请求path={} 提交token={}", SaHolder.getRequest().getRequestPath(), StpUtil.getTokenValue());
// 检查用户是否登录
if (!StpUtil.isLogin()) {
// 如果未登录,抛出异常或返回拒绝访问的错误
throw new SaTokenException("没有登录");
}
})
cn.dev33.satoken.filter.SaPathCheckFilterForServlet#doFilter
这里会判断路径是否合法,
cn.dev33.satoken.fun.strategy.SaCheckRequestPathFunction,
过滤了./和/和.的url编码,%25是为了过滤二次编码,
cn.dev33.satoken.filter.SaServletFilter#doFilter,
全局过滤器会根据com.pj.satoken.SaTokenConfigure#getSaServletFilter中自定义的规则来判断哪些路径需要权限认证,
接着进入notMatch函数匹配请求的路径是否符合不需要权限认证的情况,
之后利用request.getRequestURI()获取我们请求的路径去匹配我们自定义的规则,
request.getRequestURI(),他直接获取我们请求的路径,
使用../和url编码会绕过以下规则,
.addInclude("/
").addExclude("/public/
"),
payload如下:/public/../acc/isLogin,