基于Session的认证方式

认证流程

基于Session认证方式的流程是,用户认证成功后,在服务端生成用户相关的数据保存在session(当前会话),而发给客户端的 sesssion_id 存放到 cookie 中,这样用客户端请求时带上 session_id 就可以验证服务器端是否存在session 数据,以此完成用户的合法校验。当用户退出系统或session过期销毁时,客户端的session_id也就无效了。
image
基于Session的认证机制由Servlet规范定制,Servlet容器已实现,用户通过HttpSession的操作方法即可实现,如下是HttpSession相关的操作API
image

核心代码:
定义拦截器

@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();
    }
}

之后对拦截器进行注入

posted @ 2023-06-17 10:11  生活的样子就该是那样  阅读(41)  评论(0编辑  收藏  举报