javaWeb简单的单点登录sso实现方法

来源:互联网 发布:四川广电网络 宽带 编辑:程序博客网 时间:2024/05/29 09:56

总结一个简单的sso单点登录实现方法,先上一张思路图:

思路不复杂,在一个Filter中如下:

String baseUrl="你的基础系统路径";//比如是120.24.270.95:8080String host=request.getHeader("HOST");String url=request.getRequestURI();if(request.getQueryString()!=null){url=url+"?"+request.getQueryString();}/***********单点登录***********/if(session.getAttribute(session_user_KEY)==null){//获取session中用户的登录信息String sso=request.getParameter("sso");if(sso!=null && sso.equals("1")){//sso标记String userName=request.getParameter("userName");String password=request.getParameter("password");ssoLoginSrv.login(userName, password, request);//如果有sso标记,获取参数中的用户名和密码,判断是否合法,合法则可免登。}else{/*加上sso标志*/if(ex.indexOf("?")>0){ex=ex+"&sso=1";}else{ex=ex+"?sso=1";}//带着url转发到基础系统response.sendRedirect(baseUrl+"/loginAction!login.do?url="+ URLEncoder.encode("http://" + host + url, "utf8"));return;}}


转发到基础系统,如果基础系统已登录,则子系统可实现免登,

是Action中的一个方法,执行完带着用户名密码转回去,

如下方法:

public String login(){Map session=ActionContext.getContext().getSession();User loginUser=(User)session.get(session_user_KEY);try{if(loginUser==null){loginUser=userSrv.login(user.getUserName(), user.getPassword());}}catch (Exception e) {log.error(e.getMessage());this.setMsg(e.getMessage());return "loginNo";}if(isNull(url)){url="/index.jsp";}else if(url.indexOf("sso=1")>0){String str1=DesUtil.encode(loginUser.getUserName(), ssoLoginPwdKey, "utf8");String str2=DesUtil.encode(loginUser.getPassword(),ssoLoginPwdKey, "utf8");url=url+"&userName="+str1+"&password="+str2;}return "loginOk";}
在strust.xml中配置转发到url,带着用户名密码回到一开始的子系统,还是被Filter拦截。

再次进入子系统Filter的时候,拿到sso标记,和用户名密码,验证是否合法,合法则往下执行,不合法跳转到登录页面。







1 1
原创粉丝点击