基于Session的认证方式
认证流程
基于Session认证方式的流程是,用户认证成功后,在服务端生成用户相关的数据保存在session(当前会话),而发给客户端的 sesssion_id 存放到 cookie 中,这样用客户端请求时带上 session_id 就可以验证服务器端是否存在session 数据,以此完成用户的合法校验。当用户退出系统或session过期销毁时,客户端的session_id也就无效了。
基于Session的认证机制由Servlet规范定制,Servlet容器已实现,用户通过HttpSession的操作方法即可实现,如下是HttpSession相关的操作API
核心代码:
定义拦截器
@Component public class SimpleAuthenticationInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //在这个方法中校验用户请求的url是否在用户的权限范围内 //取出用户的身份信息 Object object =request.getSession().getAttribute(UserDto.SESSION_USER_KEY); if (object==null){ writeContent(response,"请登录"); } UserDto user = (UserDto) object; //请求的url String requestURI = request.getRequestURI(); if (user.getAuthorities().contains("p1")&&requestURI.contains("/r1")){ return true; } if (user.getAuthorities().contains("p2")&&requestURI.contains("/r2")){ return true; } writeContent(response,"权限不足,拒绝访问"); return false; } //响应输出 private void writeContent(HttpServletResponse response, String msg) throws IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); writer.print(msg); writer.close(); } }
之后对拦截器进行注入
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
· 用 C# 插值字符串处理器写一个 sscanf