永发信息网

用java来实现单点登录大概有哪些种方法

答案:2  悬赏:40  手机版
解决时间 2021-03-01 17:56
用java来实现单点登录大概有哪些种方法
最佳答案
你这样入手,给你列出整个简单流程,你自己思考一下: 1)下载,配置 Tomcat。 2)写 JSP 与 Servlet ,调用 MySQL 或其他数据库。 3)在 Tomcat 部署你的应用程序。 4)在浏览器运行你的应用程序。 一个简单的测试系统,主要由两个页面组成就够...
全部回答
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; }}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
开一家小型洗脚店需要多少钱
时尚家居怎么去啊,有知道地址的么
宜兴景和天成好还是水岸豪庭的房子好
太阳从东——南——西,还是东——北——西。
男,65岁。持续胸痛4小时,心电图提示:Ⅱ、
国家电网昭关供电营业厅在什么地方啊,我要过
梦见白色的动物
下列属于长期金融工具的有()。A.银行间债券回
去吧皮卡丘梦境宝箱有什么用能开出什么
168元打45折是多少元
为什么狗讨厌猫
简单的洗脚工资多少?
国庄在哪里啊,我有事要去这个地方
关于热爱生命的诗歌
人们都说五岳归来不看山,黄山归来不看岳,游览
推荐资讯
.法院让我拿判决书法院违法判决我怎么办
龙争虎斗的成语故事
“一准乎礼”这四个字什么意思?
爱尚美家工程建筑有限公司在哪里啊,我有事要
杠开棋牌会所这个地址在什么地方,我要处理点
ThinkPHP order by 两个条件
您好!!卫生间的暗墙插板电压不够,我用移动
美女与野兽动画片 英语人物介绍
同学们还记得观察“洋葱表皮细胞”时的惊喜吗
我想问,如果因为低血糖昏迷了一个多月,醒来
剑网三女生适合什么职业
泳衣晒干要多长时间?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?