javaWeb简单的单点登录sso实现方法
总结一个简单的sso单点登录实现方法,先上一张思路图:
思路不复杂,在一个Filter中如下:
String baseUrl="你的基础系统路径";//比如是120.24.270.95:8080
String 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标记,和用户名密码,验证是否合法,合法则往下执行,不合法跳转到登录页面。
欢迎扫码关注微信公众号:擒贼先情王(qingshang733)
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: mfc、win32 程序的区别
- 下一篇: JS 控制文本框只能输入中文、英文、数字与指定特殊符号
