用java怎么实现QQ登录界面

用java怎么实现QQ登录界面,第1张

用java做QQ登录界面的写法如下:

package ch10;

import javaawt;

import javaawtevent;

import javaxswing;

1、//定义该类继承自JFrame,实现ActionListener接口

public class LoginTest extends JFrame implements ActionListener

{

2、//创建JPanel对象

private JPanel jp=new JPanel();

3、//创建3个标并加入数组

JLabel name = new JLabel("请输入用户名");

JLabel password = new JLabel("请输入密码");

JLabel show = new JLabel("");

private JLabel[] jl={name,password,show};

4、//创建登陆和重置按扭并加入数组

JButton login = new JButton("登陆");

JButton reset = new JButton("重置");

private JButton[] jb={login,reset};

5、//创建文本框以及密码框

private JTextField jName=new JTextField();

private JPasswordField jPassword =new JPasswordField();

public LoginTest()

{

6、//设置布局管理器为空布局,这里自己摆放按钮、标签和文本框

jpsetLayout(null);

for(int i=0;i<2;i++)

{

7、//设置标签和按扭的位置与大小

jl[i]setBounds(30,20+40i,180,20);

jb[i]setBounds(30+110i,100,80,20);

8、//添加标签和按扭到JPanel容器中

jpadd(jl[i]);

jpadd(jb[i]);

//为2个按钮注册动作事件监听器

jb[i]addActionListener(this);

}

9、//设置文本框的位置和大小,注意满足美观并足够用户名的长度

jNamesetBounds(130,15,100,20);

10、//添加文本框到JPanel容器中

jpadd(jName);

11、//为文本框注册动作事件监听器

jNameaddActionListener(this);

12、//设置密码框的位置和大小,注意满足美观和足够密码的长度

jPasswordsetBounds(130,60,100,20);

13、//添加密码框到JPanel容器中

jpadd(jPassword);

14、//设置密码框中的回显字符,这里设置美元符号

jPasswordsetEchoChar('$');

15、//为密码框注册动作事件监听器

jPasswordaddActionListener(this);

16、//设置用于显示登陆状态的标签大小位置,并将其添加进JPanel容器

jl[2]setBounds(10,180,270,20);

jpadd(jl[2]);

17、//添加JPanel容器到窗体中

thisadd(jp);

18、//设置窗体的标题、位置、大小、可见性及关闭动作

thissetTitle("登陆窗口");

thissetBounds(200,200,270,250);

thissetVisible(true);

thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

}

19、//实现动作监听器接口中的方法actionPerformed

public void actionPerformed(ActionEvent e)

{

20、//如果事件源为文本框

if(egetSource()==jName)

{

21、//切换输入焦点到密码框

jPasswordrequestFocus();

}

22、//如果事件源为重置按扭

else if(egetSource()==jb[1])

{

23、//清空姓名文本框、密码框和show标签中的所有信息

jl[2]setText("");

jNamesetText("");

jPasswordsetText("");

24、//让输入焦点回到文本框

jNamerequestFocus();

}

25、//如果事件源为登陆按钮,则判断登录名和密码是否正确

else

{

26、//判断用户名和密码是否匹配

if(jNamegetText()equals("lixiangguo")&&

StringvalueOf(jPasswordgetPassword())equals("19801001"))

{

27、jl[2]setText("登陆成功,欢迎您的到来!");

}

else

{

28、jl[2]setText("对不起,您的用户名或密码错误!");

}

}

}

public static void main(String[] args)

{

29、//创建LoginTest窗体对象

new LoginTest();

}

}

可以用户每次登录时存入当时的ip,然后 *** 作时用当前ip与数据库ip进行比对,这是比较简单的方法,学java开发推荐千锋教育,该机构拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,

学习java开发的优势如下:

1、java广受欢迎:Java仍然是世界上最受欢迎的编程语言之一,有无限多种方法使用java。在TIOBE多次公布的编程语言排行榜,Java领跑前三!

2、薪资可观:职业规划公司Gooroo在一份薪资和需求报告中指出,java仍然是美国、英国和澳大利亚最受欢迎和薪资最高的编程语言之一。

3、java程序员市场紧缺:据不完全统计,目前国内每年IT人才缺口达20万之多,而且缺口还在扩大,java作为广泛使用的编程语言,拥有庞大的客户群,现有的人才储备还远远不够,在可预计的未来,java程序员都将处于供小于求的状态。

4、java无处不在:据估计,全球范围内有超过30亿部设备运行java,超过其他任何一种语言。

想要了解更多有关java的相关信息,推荐咨询千锋教育。千锋励精图治,不改教育初心。十一年来,千锋以政策为引导,不断完善国内特色现代职业教育体系建设,充分发挥教研师资队伍使命,构建品质教育,加大创新型人才培养力度,为经济发展提供智力人才和智力支撑,成为新时期职业教育发展的新方向,在同行业中有很高的美誉度。

别听他们瞎说什么url重写技术,或者隐藏表单取值都是关了页面打开之后就没了的。只能用cookie,像百度,谷歌这些用的也是cookie。

你可以通过判断是否存在JSESSIONID来提示用户启用cookie之后再登录。

两种方式:第一种用在页面,第二种用java过滤器

页面用jq判断,单独建立一个js文件,哪个页面使用,就引入哪个页面,一般为首页。引用时,记得先引用jquery

$(function() {

var tag = isMobile(); // true为PC端,false为手机端

if (tag) {

alert("手机");

consoleinfo("手机")

}

});

function isMobile() {

var userAgentInfo = navigatoruserAgent;

var mobileAgents = [ "Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod" ];

var mobile_flag = false;

// 根据userAgent判断是否是手机

for (var v = 0; v < mobileAgentslength; v++) {

if (userAgentInfoindexOf(mobileAgents[v]) > 0) {

consoleinfo("chenk userAgent")

mobile_flag = true;

break;

}

}

var screen_width = windowscreenwidth;

var screen_height = windowscreenheight;

// 根据屏幕分辨率判断是否是手机

if (screen_width < 500 && screen_height < 800) {

consoleinfo("check screen")

mobile_flag = true;

}

return mobile_flag;

}

过滤器方式:filter

public class IsMobile implements Filter {

/

Default constructor

/

public boolean IsMobileCheck(ServletRequest sRequest) {

>

实现方式一:父域 Cookie

实现方式二:认证中心

实现方式三:LocalStorage 跨域

补充:域名分级

在 B/S 系统中,登录功能通常都是基于 Cookie 来实现的。当用户登录成功后,一般会将登录状态记录到 Session 中,或者是给用户签发一个 Token,无论哪一种方式,都需要在客户端保存一些信息(Session ID 或 Token ),并要求客户端在之后的每次请求中携带它们。在这样的场景下,使用 Cookie 无疑是最方便的,因此我们一般都会将 Session 的 ID 或 Token 保存到 Cookie 中,当服务端收到请求后,通过验证 Cookie 中的信息来判断用户是否登录 。

单点登录(Single Sign On, SSO)是指在同一帐号平台下的多个应用系统中,用户只需登录一次,即可访问所有相互信任的应用系统。举例来说,百度贴吧和百度地图是百度公司旗下的两个不同的应用系统,如果用户在百度贴吧登录过之后,当他访问百度地图时无需再次登录,那么就说明百度贴吧和百度地图之间实现了单点登录。

单点登录的本质就是在多个应用系统中共享登录状态。如果用户的登录状态是记录在 Session 中的,要实现共享登录状态,就要先共享 Session,比如可以将 Session 序列化到 Redis 中,让多个应用系统共享同一个 Redis,直接读取 Redis 来获取 Session。

当然仅此是不够的,因为不同的应用系统有着不同的域名,尽管 Session 共享了,但是由于 Session ID 是往往保存在浏览器 Cookie 中的,因此存在作用域的限制,无法跨域名传递,也就是说当用户在 app1com 中登录后,Session ID 仅在浏览器访问 app1com 时才会自动在请求头中携带,而当浏览器访问 app2com 时,Session ID 是不会被带过去的。实现单点登录的关键在于,如何让 Session ID(或 Token)在多个域中共享。

实现方式一:父域 Cookie

在将具体实现之前,我们先来聊一聊 Cookie 的作用域。

Cookie 的作用域由 domain 属性和 path 属性共同决定。domain 属性的有效值为当前域或其父域的域名/IP地址,在 Tomcat 中,domain 属性默认为当前域的域名/IP地址。path 属性的有效值是以“/”开头的路径,在 Tomcat 中,path 属性默认为当前 Web 应用的上下文路径。

如果将 Cookie 的 domain 属性设置为当前域的父域,那么就认为它是父域 Cookie。Cookie 有一个特点,即父域中的 Cookie 被子域所共享,换言之,子域会自动继承父域中的Cookie。

利用 Cookie 的这个特点,不难想到,将 Session ID(或 Token)保存到父域中不就行了。没错,我们只需要将 Cookie 的 domain 属性设置为父域的域名(主域名),同时将 Cookie 的 path 属性设置为根路径,这样所有的子域应用就都可以访问到这个 Cookie 了。不过这要求应用系统的域名需建立在一个共同的主域名之下,如 tiebabaiducom 和 mapbaiducom,它们都建立在 baiducom 这个主域名之下,那么它们就可以通过这种方式来实现单点登录。

总结:此种实现方式比较简单,但不支持跨主域名。

实现方式二:认证中心

我们可以部署一个认证中心,认证中心就是一个专门负责处理登录请求的独立的 Web 服务。

用户统一在认证中心进行登录,登录成功后,认证中心记录用户的登录状态,并将 Token 写入 Cookie。(注意这个 Cookie 是认证中心的,应用系统是访问不到的。)

应用系统检查当前请求有没有 Token,如果没有,说明用户在当前系统中尚未登录,那么就将页面跳转至认证中心。由于这个 *** 作会将认证中心的 Cookie 自动带过去,因此,认证中心能够根据 Cookie 知道用户是否已经登录过了。如果认证中心发现用户尚未登录,则返回登录页面,等待用户登录,如果发现用户已经登录过了,就不会让用户再次登录了,而是会跳转回目标 URL ,并在跳转前生成一个 Token,拼接在目标 URL 的后面,回传给目标应用系统。

应用系统拿到 Token 之后,还需要向认证中心确认下 Token 的合法性,防止用户伪造。确认无误后,应用系统记录用户的登录状态,并将 Token 写入 Cookie,然后给本次访问放行。(注意这个 Cookie 是当前应用系统的,其他应用系统是访问不到的。)当用户再次访问当前应用系统时,就会自动带上这个 Token,应用系统验证 Token 发现用户已登录,于是就不会有认证中心什么事了。

这里顺便介绍两款认证中心的开源实现:

Apereo CAS 是一个企业级单点登录系统,其中 CAS 的意思是”Central Authentication Service“。它最初是耶鲁大学实验室的项目,后来转让给了 JASIG 组织,项目更名为 JASIG CAS,后来该组织并入了Apereo 基金会,项目也随之更名为 Apereo CAS。

XXL-SSO 是一个简易的单点登录系统,由大众点评工程师许雪里个人开发,代码比较简单,没有做安全控制,因而不推荐直接应用在项目中,这里列出来仅供参考。

总结:此种实现方式相对复杂,支持跨域,扩展性好,是单点登录的标准做法。

实现方式三:LocalStorage 跨域

前面,我们说实现单点登录的关键在于,如何让 Session ID(或 Token)在多个域中共享。

父域 Cookie 确实是一种不错的解决方案,但是不支持跨域。那么有没有什么奇*技巧能够让 Cookie 跨域传递呢?

很遗憾,浏览器对 Cookie 的跨域限制越来越严格。Chrome 浏览器还给 Cookie 新增了一个 SameSite 属性,此举几乎禁止了一切跨域请求的 Cookie 传递(超链接除外),并且只有当使用 >

不过,在前后端分离的情况下,完全可以不使用 Cookie,我们可以选择将 Session ID (或 Token )保存到浏览器的 LocalStorage 中,让前端在每次向后端发送请求时,主动将 LocalStorage 的数据传递给服务端。这些都是由前端来控制的,后端需要做的仅仅是在用户登录成功后,将 Session ID (或 Token )放在响应体中传递给前端。

在这样的场景下,单点登录完全可以在前端实现。前端拿到 Session ID (或 Token )后,除了将它写入自己的 LocalStorage 中之外,还可以通过特殊手段将它写入多个其他域下的 LocalStorage 中。

————————————————

版权声明:本文为CSDN博主「风水道人」的原创文章,遵循CC 40 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:>

前端通过 iframe+postMessage() 方式,将同一份 Token 写入到了多个域下的 LocalStorage 中,前端每次在向后端发送请求之前,都会主动从 LocalStorage 中读取 Token 并在请求中携带,这样就实现了同一份 Token 被多个域所共享。

总结:此种实现方式完全由前端控制,几乎不需要后端参与,同样支持跨域。

补充:域名分级

从专业的角度来说(根据《计算机网络》中的定义),com、cn 为一级域名(也称顶级域名),comcn、baiducom 为二级域名,sinacomcn、tiebabaiducom 为三级域名,以此类推,N 级域名就是 N-1 级域名的直接子域名。

从使用者的角度来说,一般把可支持独立备案的主域名称作一级域名,如 baiducom、sinacomcn 皆可称作一级域名,在主域名下建立的直接子域名称作二级域名,如 tiebabaiducom 为二级域名。

以上就是关于用java怎么实现QQ登录界面全部的内容,包括:用java怎么实现QQ登录界面、java开发中 如何实现异地登陆的检查呢、java web 问题,已登录用户,不登出,直接关闭页面,再重新打开,仍然是登录状态,如何实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9506508.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存