php发展

首页 » 常识 » 常识 » 11月9日11月16日学校宣讲会信息
TUhjnbcbe - 2021/4/28 5:07:00
点击“开发者技术前线”,选择“星标??”

在看

星标

留言,真爱

来自:ywlaker

责编:乐乐

回复“”,获取一份专属大礼包

链接:cnblogs.
  sso-server

1、验证用户的登录信息;2、创建全局会话;3、创建授权令牌;4、与sso-client通信发送令牌;5、校验sso-client令牌有效性;6、系统注册;7、接收sso-client注销请求,注销所有会话。

接下来,我们按照原理来一步步实现sso吧!

1、sso-client拦截未登录请求

java拦截请求的方式有servlet、filter、listener三种方式,我们采用filter。在sso-client中新建LoginFilter.java类并实现Filter接口,在doFilter()方法中加入对未登录用户的拦截。

publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{HttpServletRequestreq=(HttpServletRequest)request;HttpServletResponseres=(HttpServletResponse)response;HttpSessionsession=req.getSession();if(session.getAttribute("isLogin")){chain.doFilter(request,response);return;}//跳转至sso认证中心res.sendRedirect("sso-server-url-with-system-url");}

2、sso-server拦截未登录请求

拦截从sso-client跳转至sso认证中心的未登录请求,跳转至登录页面,这个过程与sso-client完全一样。

3、sso-server验证用户登录信息

用户在登录页面输入用户名密码,请求登录,sso认证中心校验用户信息,校验成功,将会话状态标记为“已登录”

RequestMapping("/login")publicStringlogin(Stringusername,Stringpassword,HttpServletRequestreq){this.checkLoginInfo(username,password);req.getSession().setAttribute("isLogin",true);return"success";}

4、sso-server创建授权令牌

授权令牌是一串随机字符,以什么样的方式生成都没有关系,只要不重复、不易伪造即可,下面是一个例子

Stringtoken=UUID.randomUUID().toString();

5、sso-client取得令牌并校验

sso认证中心登录后,跳转回子系统并附上令牌,子系统(sso-client)取得令牌,然后去sso认证中心校验,在LoginFilter.java的doFilter()中添加几行

//请求附带token参数Stringtoken=req.getParameter("token");if(token!=null){//去sso认证中心校验tokenbooleanverifyResult=this.verify("sso-server-verify-url",token);if(!verifyResult){res.sendRedirect("sso-server-url");return;}chain.doFilter(request,response);}

verify()方法使用

1
查看完整版本: 11月9日11月16日学校宣讲会信息