当前位置: 代码迷 >> 综合 >> 利用过滤器chain.doFilter(req,resp)实现伪单点登录以及登录拦截
  详细解决方案

利用过滤器chain.doFilter(req,resp)实现伪单点登录以及登录拦截

热度:45   发布时间:2023-11-27 02:30:52.0

单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
因为开发需要,自己看了一些与单点登录相关的资料,想要实现这个功能,不过鼓捣了几天也没有弄成功,后来自己另辟蹊径利用过滤器实现了相应的功能。话不多说,代码如下(过滤器):

 public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubHttpServletRequest servletRequest = (HttpServletRequest) request;HttpServletResponse servletResponse = (HttpServletResponse) response;HttpSession session = servletRequest.getSession();if (session.getAttribute("adminName") != null //登录链拦截,判断用户是否登录&& session.getAttribute("adminName") != "") {chain.doFilter(request, response); //如果用户已经登录,就继续用户当前的请求return;} else {String getQer = servletRequest.getQueryString();//获取用户请求链接里面的参数,比如http://xxx.com?id=xxx这个链接的“id=xxx”这个参数String requestUrl; //定义一个变量用户保存用户请求的URLif (getQer == null || getQer == "") {// 如果请求参数为空的话requestUrl = servletRequest.getServletPath(); //获取用户请求的Url} else {requestUrl = servletRequest.getServletPath() + "?"+ servletRequest.getQueryString();  //请求的相对url;// 请求参数}session.setAttribute("setRequestUrl", requestUrl);// 保存请求路径到setRequestUrl//System.out.println("我是getQer:" + getQer);servletResponse.sendRedirect(servletRequest.getContextPath()+ "/Admin/Login.jsp"); //跳转到登录页面,让用户登录}}

以上的代码在获取用户请求路径的同时也实现了用户登录过滤,防止未登录的用户进行一些非法操作
以下是用户登录页面代码(部分):

				session.setAttribute("adminName", adminName);//将用户名保存在session中String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":"+ request.getServerPort() + path;//获得当前项目的路径String getUrl = basePath+ session.getAttribute("setRequestUrl");//获取刚刚保存的请求地址if (getUrl != null || getUrl != "") {  //判断用户的请求路径是否为空,如果不为空就跳转到该页面response.sendRedirect(getUrl);} else {response.sendRedirect("Management\\index.jsp");}

通过以上逻辑代码,就可以实现单点登录的功能了,希望给有需要的同道之人一些思路。
ps:新人小白,若有不当之处,欢迎指教。

  相关解决方案