单点登录,java实现

 我来答
叶孤柳思0k0
2020-07-08
知道答主
回答量:29
采纳率:100%
帮助的人:5.9万
展开全部

可以直接通过玉符科技IDAAS平台来实现单点登录,支持所有的标准协议,如果是老旧或者自研的系统,也有SDK去适配所有的开发语言,不止是java。

玉符单点登录

小傻

2018-07-26 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31133
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部
单点登陆的话,你可以使用token来实现,比如一个用户一次只生成一个token,这样别人在访问的时候,就会重新生成一个,之前的就会被踢出线
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
安全管理人12345gf
推荐于2017-09-12 · TA获得超过5523个赞
知道大有可为答主
回答量:5473
采纳率:62%
帮助的人:1167万
展开全部
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginFilter implements Filter {
private String loginInfoPath;
public void destroy() {
   loginInfoPath = null;
}
public void doFilter(ServletRequest sreq, ServletResponse sresp,
    FilterChain chain) throws IOException, ServletException {
   HttpServletRequest req = (HttpServletRequest) sreq;
   HttpServletResponse resp = (HttpServletResponse) sresp;
   Class loginInfoClass = null;
   LoginInfoBase loginInfo = null;
   try {
    loginInfoClass = Class.forName(loginInfoPath);
    loginInfo = (LoginInfoBase) loginInfoClass.newInstance();
   } catch (ClassNotFoundException e) {
    e.printStackTrace();
   } catch (InstantiationException e) {
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    e.printStackTrace();
   }
   loginInfo.setReq(req);
   loginInfo.setResp(resp);
   //session值为空
   if(loginInfo.isSessionEmpty()){
    if(loginInfo.init()){
     boolean loginResult = loginInfo.doLogin();
     if(loginResult){
      loginInfo.saveCookie();
     }
    }
   }else{
    if(loginInfo.init()){
     //另外一套系统已经退出
     if("out".equals(loginInfo.getLoginState())){
      loginInfo.doLogout();
      CookieUtil.delCookie(resp, LoginInfoBase.COOKIE_NAME);
     }
    }
   }
   chain.doFilter(sreq, sresp);
}
public void init(FilterConfig config) throws ServletException {
   this.loginInfoPath = config.getInitParameter("loginInfoPath");
}
public String getLoginInfoPath() {
   return loginInfoPath;
}
public void setLoginInfoPath(String loginInfoPath) {
   this.loginInfoPath = loginInfoPath;
}

}
loginInfoPath 在web.xml中配置指明LoginInfoBase的子类的完整路径用来反射
LoginInfoBase代码:
package com.yt.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public abstract class LoginInfoBase {
public static final String SEPARATION = "-->";
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final long COOKIE_TIME = 1800000;
public static final String COOKIE_NAME = "loginInfo";
public static final String COOKIE_PATH = "/";

protected HttpServletRequest req;
protected HttpServletResponse resp;

protected Date sessionTime;
protected String userName;
protected String userPass;
protected String loginState;

public LoginInfoBase() {
   super();
}
public LoginInfoBase(HttpServletRequest req, HttpServletResponse resp) {
   super();
   this.req = req;
   this.resp = resp;
}
public LoginInfoBase(String userName, String pwd, Date sessionTime) {
   this.userName = userName;
   this.userPass = pwd;
   this.sessionTime = sessionTime;
}

abstract void doLogout();
abstract boolean isSessionEmpty();
abstract boolean doLogin();

public HttpServletRequest getReq() {
   return req;
}
public void setReq(HttpServletRequest req) {
   this.req = req;
}
public HttpServletResponse getResp() {
   return resp;
}
public void setResp(HttpServletResponse resp) {
   this.resp = resp;
}

//初始化登录对象
protected boolean init(){
   String loginInfoStr = CookieUtil.getValue(req, LoginInfoBase.COOKIE_NAME);
   if(loginInfoStr == null || "".equals(loginInfoStr)){
    return false;
   }
   String[] infoArray = loginInfoStr.split(SEPARATION);
   if(infoArray.length>3){
    this.userName = DigestUtil.getFromBASE64(infoArray[0]);
    this.userPass = DigestUtil.getFromBASE64(infoArray[1]);
    this.sessionTime = buildDate(infoArray[2]);
    this.loginState = infoArray[3];
   }
   if(new Date().getTime() - getSessionTime().getTime() > LoginInfo.COOKIE_TIME){
    CookieUtil.delCookie(resp, LoginInfo.COOKIE_NAME);
    return false;
   }
   return true;
}

protected void saveCookie(){
   setSessionTime(new Date());
   setLoginState("in");
   CookieUtil.addCookie(resp, LoginInfo.COOKIE_NAME, toString(), "/");
}

public void clearCookie(){
   setUserName("XX");
   setUserPass("XX");
   setSessionTime(new Date());
   setLoginState("out");
   CookieUtil.addCookie(resp, LoginInfo.COOKIE_NAME, toString(), "/");
}

@Override
public String toString() {
   return DigestUtil.getBASE64(userName)+SEPARATION+DigestUtil.getBASE64(userPass)+SEPARATION+formateSessionTime()+SEPARATION+loginState;
}

private String formateSessionTime(){
   SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT);
   String timeStr =df.format(sessionTime);
   return timeStr;
}
private Date buildDate(String sessionTime) {
   SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT);
   Date date = null;
     try {
         date = df.parse(sessionTime); 
     }catch (Exception ex){
         System.out.println(ex.getMessage());
     } 
   return date;
}
public Date getSessionTime() {
   return sessionTime;
}
public void setSessionTime(Date sessionTime) {
   this.sessionTime = sessionTime;
}
public String getUserName() {
   return userName;
}
public void setUserName(String userName) {
   this.userName = userName;
}
public String getUserPass() {
   return userPass;
}
public void setUserPass(String userPass) {
   this.userPass = userPass;
}
public String getLoginState() {
   return loginState;
}
public void setLoginState(String loginState) {
   this.loginState = loginState;
}}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heart你好评
2015-12-16 · 知道合伙人软件行家
heart你好评
知道合伙人软件行家
采纳数:186 获赞数:614
本人主要擅长网络运营、网络营销管理以及办公软件化操作

向TA提问 私信TA
展开全部
public boolean login() throws LoginException{
try {
if (Cookielogin()) return true;
} catch (IOException ex) {
ex.printStackTrace();
}
if (passwordlogin()) return true;
throw new FailedLoginException();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友93a4c33
2011-08-10 · TA获得超过1496个赞
知道大有可为答主
回答量:1516
采纳率:0%
帮助的人:1295万
展开全部
看你怎么做了,有开源框架可以帮助你,!
一般用spring 的security比较不错
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式