JAVAWEB用户登录功能的实现


return false;
}
return true;
}
});
生成验证码的 Servlet:ValidationCode.java
package erlogin.sample;
import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException;
<link href="css/style.css" rel="stylesheet" type="text/css" />
</heபைடு நூலகம்d>
<body>
<div id="loginpanelwrap">
<div class="loginheader">
<div class="logintitle">登录</div>
//因此,为了保险起见,同时使用这 3 条语句来关闭浏览器的缓冲区 resp.setHeader("ragma", "No-cache"); resp.setHeader("Cache-Control", "no-cache"); resp.setDateHeader("Expires", 0);
//设置图形验证码的长和宽
</div>
<form action = "/UserLogin/Sample1/loginServlet">
<div class="loginform">
<div class="loginform_row">
<label>用户名:</label>
<input type="text" class="loginform_input" name="username" />
g.setColor(getRandomColor(120, 180));
//用户保存最后随机生成的验证码
StringBuilder validationCode = new StringBuilder();
//验证码的随机字体
String[] fontNames = {"Times New Roman","Book antiqua","Arial"};
Random random = new Random();
if(minColor > 255){
minColor = 255;
}
if(maxColor > 255){
maxColor = 255;
}
//获得 r 的随机颜色值
int red = minColor + random.nextInt(maxColor-minColor);
</div>
<div class="loginform_row">
<label>密码:</label>
<input type="password" class="loginform_input" name="password" />
</div>
<div class = "loginform_row">
}
//判断验证码
if($("input[name=validationCode]").val()
==
null
||
$("input[name=validationCode]").val() == ""){
alert("验证码不能为空");
$("input[name=validationCode]").focus();
<label>验证码:</label>
<input type = "text" class="loginform_input_validationCode" name =
"validationCode"/>
<img
class
=
"validationCode_img"
src="/UserLogin/Sample1/validationCode">
Random random = new Random();
g.setColor(getRandomColor(180, 250));
g.fillRect(0, 0, width, height);
g.setFont(new Font("Times New Roman",Font.ITALIC,height));
validationCode.append(codeChar);
//随机设置当前验证码字符的颜色
g.setColor(getRandomColor(10, 100));
//在图形上输出验证码字符,x 和 y 都是随机生成的
g.drawString(String.valueOf(codeChar), 16*i + random.nextInt(7), height-random.nextInt(6));
//随机生成 3-5 个验证码
for(int i = 0; i < 4; i++){
//随机设置当前验证码的字符的字体
g.setFont(new Font(fontNames[random.nextInt(3)],Font.ITALIC,height));
//随机获得当前验证码的字符
char codeChar = codeChars.charAt(random.nextInt(charsLength));
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp); }
//图形验证码的字符集,系统将随机从这个字符串中选择一些字符作为验证码
有可能用得到的部分:生成验证码的 Java 类、操作数据库的 Java 类 用户登录模块采用了多种语言:
Html、css、query:页面 Servlet、java:后台 运行效果图:
Login.html 代码:
<!DOCTYPE html> <html> <head lang="en">
<meta charset="UTF-8"> <title>登录界面</title> <script src="js/jquery-1.11.1.js"></script> <script src="js/login.js"></script>
//g
int green = minColor + random.nextInt(maxColor-minColor);
//b
int blue = minColor + random.nextInt(maxColor-minColor);
return new Color(red,green,blue);
</div>
</form>
</div>
</body>
</html>
JQuery 代码:login.js
$(function(){ $(".loginform_submit").click(function(){ if(checkInput()) { $("form").action("/loginServlet"); }else{ return false;
JavaWeb 用户登录功能的实现
大四快毕业了,3 年多的时间中,乱七八糟得学了一大堆,想趁找工作之前把所学的东 西整理一遍,所以就尝试着做一个完整的 JavaWeb 系统,这几天试着做了一个用户登录的 功能,分享给大家,肯定有很多不完善的地方,希望大家提提宝贵的意见,必将努力完善它。
我贴出此篇博客的目的是,将一些以后有可能用到的重复性的代码保存下来,用于以后 需要时直接复制粘贴,所以,此篇博客大部分都是代码,讲解性的语句并不多,如果大家看 得头疼,不如不看,以后万一用到的话再拿过来修修改改即可。
} }); $(".validationCode_img").click(function(){
合集下载

java用户登录界面的代码

java用户登录界面的代码

java用户登录界面的代码以下是一个简单的Java用户登录界面的代码示例,其中包括了GUI界面设计和用户验证的代码:```javaimport javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.JPasswordField;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;public class LoginWindow extends JFrame implements ActionListener {private JLabel usernameLabel, passwordLabel;private JTextField usernameTextField;private JPasswordField passwordField;private JButton loginButton;public LoginWindow() {setTitle("用户登录");setSize(400, 200);setLocationRelativeTo(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);usernameLabel = new JLabel("用户名:");passwordLabel = new JLabel("密码:");usernameTextField = new JTextField();passwordField = new JPasswordField();loginButton = new JButton("登录");loginButton.addActionListener(this);setLayout(null);usernameLabel.setBounds(50, 30, 80, 25);passwordLabel.setBounds(50, 70, 80, 25);usernameTextField.setBounds(130, 30, 200, 25);passwordField.setBounds(130, 70, 200, 25);loginButton.setBounds(150, 120, 100, 25);add(usernameLabel);add(passwordLabel);add(usernameTextField);add(passwordField);add(loginButton);setVisible(true);}public void actionPerformed(ActionEvent e) {String username = usernameTextField.getText();String password = newString(passwordField.getPassword());if (isValidUser(username, password)) {System.out.println("用户登录成功!");// 在这里可以跳转到下一个界面} else {System.out.println("用户名或密码错误!");}}private boolean isValidUser(String username, String password) {// 在这里实现用户验证的代码// 比如查询数据库是否有该用户并且密码是否匹配等等// 如果验证成功则返回true,否则返回falsereturn false;}public static void main(String[] args) {new LoginWindow();}}```该代码创建了一个窗口界面,包括“用户名”和“密码”两个文本框,以及一个“登录”按钮。

登录系统设计实验报告(3篇)

登录系统设计实验报告(3篇)

第1篇一、实验目的1. 熟悉登录系统的基本原理和设计流程。

2. 掌握使用常见开发工具进行登录系统设计的方法。

3. 提高编程能力和系统设计能力。

二、实验环境1. 操作系统:Windows 102. 开发工具:Java Web Development Kit (JDK) 1.83. 数据库:MySQL 5.74. 开发环境:Eclipse三、实验内容1. 需求分析2. 系统设计3. 系统实现4. 系统测试四、实验步骤1. 需求分析(1)用户需求登录系统应具备以下功能:1)用户注册:允许用户创建账户,输入用户名、密码、邮箱等基本信息。

2)用户登录:允许用户输入用户名和密码,验证用户身份。

3)找回密码:当用户忘记密码时,提供找回密码功能。

4)注销登录:允许用户退出登录状态。

(2)系统需求1)安全性:系统需保证用户数据的安全,防止数据泄露。

2)易用性:系统界面简洁,操作方便,易于用户使用。

3)稳定性:系统需具备良好的稳定性,能够应对高并发访问。

2. 系统设计(1)系统架构登录系统采用B/S(Browser/Server)架构,分为前端和后端两部分。

前端:使用HTML、CSS、JavaScript等技术实现用户界面。

后端:使用Java语言进行开发,结合MySQL数据库存储用户信息。

(2)模块设计1)用户注册模块:实现用户注册功能,包括输入用户名、密码、邮箱等基本信息。

2)用户登录模块:实现用户登录功能,验证用户身份。

3)找回密码模块:实现找回密码功能,允许用户通过邮箱或手机号找回密码。

4)注销登录模块:实现用户注销登录状态。

3. 系统实现(1)前端实现使用HTML、CSS、JavaScript等技术实现登录系统界面,包括注册、登录、找回密码等页面。

(2)后端实现1)使用Java语言实现用户注册、登录、找回密码等业务逻辑。

2)使用JDBC连接MySQL数据库,实现用户信息的存储和查询。

4. 系统测试(1)功能测试1)测试用户注册功能,确保用户可以成功注册账户。

java用户登录的代码

java用户登录的代码
button1=new JButton("确定");
button2=new JButton("取消");
text=new JTextField(20);
pass=new JPasswordField(20);
button1.setMnemonic(KeyEvent.VK_O);//设置按钮快捷键
button2.setMnemonic(KeyEvent.VK_C);
text.setText("用户名及密码正确!");
pass.setText("");
}
else{
text.setText("");
pass.setText("");
}
}
else
System.exit(0);//退出程序
}
else
System.exit(0);//退出程序
}
}
public class LoginFrame extends JFrame {
public static void main(String[] args) {
MyJPanel jp=new MyJPanel();//定义面板
jp.setBorder(BorderFactory.createTitledBorder("输入用户名和密码"));//设定边界
JFrame frame=new JFrame("用户登录");
private JLabel label1,label2;
private JTextField text;
private JPasswordField pass;

javaweb课程设计源码参考

javaweb课程设计源码参考

javaweb课程设计源码参考JavaWeb课程设计源码参考一、引言JavaWeb课程设计是计算机科学与技术专业的一门重要课程。

在这门课程中,学生需要掌握JavaWeb开发的基本知识和技能,并通过实践来加深对所学知识的理解。

本文将为大家提供一些JavaWeb课程设计的源码参考,帮助学生更好地完成课程设计。

二、登录页面登录页面是JavaWeb课程设计中常见的一个功能模块。

下面是一个简单的登录页面源码参考:```java<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><!DOCTYPE html><html><head><title>登录页面</title></head><body><form action="login" method="post"><label for="username">用户名:</label><input type="text" id="username" name="username"><br><br><label for="password">密码:</label><input type="password" id="password" name="password"><br><br><input type="submit" value="登录"></form></body></html>```三、登录功能实现登录功能是JavaWeb课程设计中的核心功能之一。

登录功能的实现描述

登录功能的实现描述

登录功能的实现描述
登录功能是网站、应用程序或在线平台中不可或缺的一部分,可以让用户验证其身份并访问受保护的内容或服务。

下面是实现登录功能的一般步骤和注意事项。

步骤:
1. 设计用户登录界面:登录界面应该简洁、易于使用,同时提供必要的验证功能,例如用户名和密码输入框、登录按钮、验证码等。

2. 实现用户名和密码存储:通常将用户登录的用户名和密码存储在服务器上的数据库中,以便在需要时进行访问。

为了提高安全性,可以使用加密算法对数据进行加密。

3. 实现身份验证:在用户登录时,需要验证其用户名和密码。

这可以通过多种方式实现,例如使用密码哈希函数、用户名词典、多因素身份验证等。

4. 实现安全性保护:为了增强用户登录的安全性,可以使用身份验证授权、访问控制、数据加密等技术。

例如,可以限制用户只能登录自己的账户,或者只有在验证身份后才能访问受保护的内容或服务。

注意事项:
1. 确保用户输入的用户名和密码足够安全。

不应该将用户密码明文存储在服务器上,而应该使用加密算法对数据进行加密。

2. 不要在用户界面上显示过多的信息,以免用户迷失在界面上。

3. 定期备份用户数据,以便在数据丢失或系统故障时能够恢复用户数据。

4. 限制用户登录次数,以避免重复登录和恶意登录。

5. 对于使用人工智能或机器学习的应用程序或网站,应该对登录数据进行
适当的安全处理,以避免模型被攻击或泄露用户信息。

JAVA web用户登录完整代码

JAVA web用户登录完整代码

java action:LoginForm form=(LoginForm)actionForm;ActionMessages errors = new ActionMessages();System.out.println(";form.getAction()=";+form.getAction());if (";login";.equals(form.getAction())) {System.out.println(";----------------login--------------";);AuthCodeCookie authCodeCookie = new AuthCodeCookie(request,response);if (!authCodeCookie.getAuthCode().equals(form.getAuthCode())) {//验证码不正确errors.add(";error.login.authcode";, new ActionMessage(";error.login.authcode";));this.saveErrors(request, errors);return mapping.getInputForward();}User user = this.getUserService().get(form.getUserId());if(user==null){errors.add(";er";, new ActionMessage(";er";));this.saveErrors(request, errors);return mapping.getInputForward();}Util util = new Util();if(!util.hash(form.getPassword()).equals(user.getPassword())){errors.add(";error.login.password";, new ActionMessage(";error.login.password";));this.saveErrors(request, errors);return mapping.getInputForward();}// 一旦登录成功,创建sessionHttpSession session = request.getSession();UserSession userSession = new UserSession();userSession.setUser(user);session.setAttribute(ER_SESSION_KEY, userSession);//把UserSession传递到下个页面// 并且修改用户登录时间,登录次数+1user.setLastLoginDate(Util.getCurrentDate(";yyyyMMdd hhmmss";));user.setLoginTimes(Integer.valueOf(user.getLoginTimes().intValue()+1));this.getUserService().update(user);System.out.println(";----------------------------------------------------";) ;// // 获取用户对应的系统应用菜单List allModuleList = this.getModuleService().getModuleTree(Integer.parseInt(user.getMenuLevel()));//0代表根菜单// List allModuleList = this.getModuleService().getModuleTree(1);//0代表主菜单// System.out.println(";allModuleList.size=";+allModuleList.size()); // for(int i=0;i<;allModuleList.size();i++){//System.out.println(";";+((Module)allModuleList.get(i)).getModuleName());// }Iterator menu = allModuleList.iterator();Vector parentV = new Vector();Vector childV = new Vector();Module m;while (menu.hasNext()) {m = (Module) menu.next();if(user.getPermission().indexOf(";[";+m.getId()+";]";)!=-1){if (m.getParentId().intValue() == 0) {parentV.add(m);} else {childV.add(m);}}}request.getSession().setAttribute(";parentVector";, parentV);request.getSession().setAttribute(";childVector";, childV);System.out.println(";初始化完毕";);return mapping.findForward(";userPanel";);}jsp:<;%@ page contentType=";text/html;charset=UTF-8";%>;<;%@ taglib uri=";/WEB-INF/struts-bean.tld"; prefix=";bean";%>;<;%@ taglib uri=";/WEB-INF/struts-html.tld"; prefix=";html";%>;<;%@ taglib uri=";/WEB-INF/struts-logic.tld"; prefix=";logic";%>;<;jsp:useBean id=";user_session"; scope=";session";type=";erSession"; />;<;%er user = null;if (user_session != null)user = user_session.getUser();//根据权限获得菜单,这里权限用Telephone替代一下先String str = user.getTelephone();%>;<;html>;<;head>;<;meta http-equiv=";Content-Type"; content=";text/html; charset=UTF-8";>;<;title>;LEFT<;/title>;<;link rel=";stylesheet"; href=";css/style.css"; type=";text/css";>;<;script language=";JavaScript";>;<;!--function doExit(){if (confirm(";您确定要退出帐单门户系统吗?";)){window.open(";login.portal?action=logout";,";_parent";,";";);}}//-->;<;/script>;<;script language=";JavaScript";>;var w=200;function closenavi() {w-=200;if (w>;-10) {window.parent.testframeset.cols = ''+w+',*';repeat=setTimeout(";closenavi()";,10);}else {clearTimeout(repeat);w=200;}}function loginOutPage() {document.forms[1].SIGN_OFF.click();}function initIt(){divCount = document.all.tags(";DIV";);for (i=0; i<;divCount.length; i++) {obj = divCount(i);if (obj.className == ";child"; || obj.className == ";child1";) obj.style.display = ";none";;}}function expandIt(el) {obj = eval(";page"; + el);obj2 = eval(";main"; + el);if (obj.style.display == ";none";) {obj.style.display = ";block";;}else {obj.style.display = ";none";;}}onload = initIt;var judge=0;function expandall(o) {if (judge==0) {divCount2 = document.all.tags(";DIV";);for (i=0; i<;divCount2.length; i++) {obj2 = divCount2(i);if (obj2.className == ";child"; || obj.className == ";child1"; || obj2.style.display == ";none";){obj2.style.display = ";block";;}if (obj2.className == ";menu";){//obj2.all.tags('img')[0].src='images/treeimg/tminus.gif';obj2.all.tags('img')[0].src='images/openfolder1.gif';}}judge=1;o.src='images/icon-closeall.gif';o.alt='全部折叠';}else {divCount2 = document.all.tags(";DIV";);for (i=0; i<;divCount2.length; i++) {obj2 = divCount2(i);if (obj2.className == ";child"; || obj.className == ";child1"; || obj2.style.display == ";block";){obj2.style.display = ";none";;}if (obj2.className == ";menu";){obj2.all.tags('img')[0].src='images/folder1.gif';}}judge=0;o.src='images/icon-expandall.gif';o.alt='全部展开';}}function quit(form) {window.close()}function loginOutPage() {document.forms[0].SIGN_OFF.click();}<;/script>;<;/head>;<;body bgcolor=";#D8DADA"; class=";bodyTop";>;<;center>;<;table width=";161"; border=";0"; cellspacing=";0"; cellpadding=";0";>;<;tr>;<;td>;<;table style=";margin-top: 10px; margin-bottom: 10px"; width=";138";border=";0"; align=";center"; cellpadding=";0"; cellspacing=";0";>;<;tr>;<;td>;<;img src=";images/001.jpg"; width=";138"; height=";6";>;<;/td>;<;/tr>;<;tr>;<;td class=";msBack";>;<;table width=";130"; border=";0"; align=";center"; cellpadding=";3";cellspacing=";0";>;<;tr>;<;td width=";19";>;<;img src=";images/em44.gif"; width=";19"; height=";19";>;<;/td>;<;td class=";message";>;您有新的帐单信息<;/td>;<;/tr>;<;tr>;<;td>;<;img src=";images/em44.gif"; width=";19"; height=";19";>;<;/td>;<;td class=";message";>;您有新的支付信息<;/td>;<;/tr>;<;/table>;<;/td>;<;/tr>;<;tr>;<;td>;<;img src=";images/002.jpg"; width=";138"; height=";6";>;<;/td>;<;/tr>;<;/table>;<;/td>;<;/tr>;<;/table>;<;logic:iterate id=";module"; name=";parentVector";type=";com.worthtech.billportal.bean.Module";indexId=";index";>;<;%int i = ((ng.Integer) pageContext.findAttribute(";index";)).intValue();%>;<;div id=<;%=";main"; + i%>; class=";title";onClick=";expandIt(<;%=";"; + i%>;); return false";>;<;%if(str.indexOf(";[";+module.getId()+";]";)!=-1){%>;<;table class=";TableLeftTop"; style=";margin-top: 10px"; width=";138";border=";0"; cellspacing=";0"; cellpadding=";4";>;<;tr>;<;td background=";images/LeftMenuBack.jpg";>;<;div align=";center";>;<;%=module.getModuleName()%>;<;/div>;<;/td>;<;/tr>;<;/table>;<;%}%>;<;/div>;<;div id=<;%=";page"; + i%>; class=";child";>;<;table class=";TableLeftView"; width=";170"; border=";0"; cellspacing=";0";cellpadding=";0";>;<;logic:iterate id=";childModule"; name=";childVector";type=";com.worthtech.billportal.bean.Module";>;<;%if(str.indexOf(";[";+childModule.getId()+";]";)!=-1&;&;childModule.getParent ID().intValue()==module.getId().intValue()){%>;<;tr>;<;td width=";44";>;<;div align=";right";>;<;img src=";images/t.gif"; width=";19"; height=";20";>;<;/div>;<;/td>;<;td width=";161";>;<;a href=<;%=childModule.getActionURL()%>; target=";mainFrame";>;<;%=childModule.getModuleName()%>;<;/a>;<;/td>;<;/tr>;<;%}%>;<;/logic:iterate>;<;/table>;<;/div>;<;/logic:iterate>;<;table style=";margin-top: 10px"; width=";161"; border=";0";cellspacing=";0"; cellpadding=";2";>;<;tr>;<;td>;<;table width=";141"; border=";0"; align=";center"; cellpadding=";2";cellspacing=";0";>;<;tr>;<;td>;<;div align=";center";>;<;a href=";#"; onclick=";doExit();";>;<;imgsrc=";images/ico01.gif";width=";65"; height=";15"; border=";0";class=";MouseOver";>; <;/a>;<;/div>;<;/td>;<;td>;<;div align=";center";>;<;ahref=";user.portal?action=password";target=";mainFrame";>;<;imgclass=";MouseOver";src=";images/ico02.gif";width=";65"; height=";15"; border=";0";>;<;/a>;<;/div>;<;/td>;<;/tr>;<;/table>;<;/td>;<;/tr>;<;/table>;<;/center>;<;/body>;<;/html>;。

java登陆原理

java登陆原理
Java登录原理是通过验证用户输入的用户名和密码来判断用户是否合法,并根据验证结果为用户提供相应的访问权限。

具体实现过程如下:
1. 用户在登录界面输入用户名和密码,并点击登录按钮。

2. 后台服务器接收到用户的登录请求,并从数据库中检索出与输入的用户名匹配的用户信息。

3. 如果找到了相应的用户信息,则将数据库中存储的用户密码与用户输入的密码进行比对。

4. 如果两者匹配,则说明用户输入的密码是正确的,登录验证成功。

5. 系统根据用户的权限设置,决定为其提供相应的操作界面和功能。

6. 如果用户输入的密码与数据库中存储的密码不匹配,或者输入的用户名不存在,则登录验证失败,系统将提示用户重新输入正确的用户名和密码。

需要注意的是,为了保证用户密码的安全性,通常会对密码进行加密存储,而非明文存储。

在验证密码时,会将用户输入的密码进行相同的加密算法处理,然后与数据库中存储的加密密码进行比对。

这样即使数据库被非法访问,也不会直接泄露用户的密码信息。

另外,为了提高用户体验和安全性,登录过程通常还会包括一些验证码、记住密码、自动登录等功能的实现,以及一些额外的安全验证措施,如限制登录次数、用户锁定等。

这些都是为了保障用户信息的安全和提升系统的可用性。

【Java】JavaWeb登录检查及界面跳转

【Java】JavaWeb登录检查及界⾯跳转场景 ⼀般javaweb⽹站都有⽤户登录,⽽有⼀些操作必须⽤户登录才能进⾏,常见流程:⽤户请求--》后台判断是否登录--》没登录跳转到登录界⾯,登录⽤户正常操作解决思路 在⽤过滤器过滤请求,判断是否登录,如果未登录,返回参数跳转的登录界⾯,登录了的请求放⾏具体实现 新建⼀个web⼯,参考: 新建⼀个LoginFilter过滤器类,继承Filter类1package com.test.login;23import java.io.IOException;4import java.io.PrintWriter;5import java.util.ArrayList;6import java.util.List;78import javax.servlet.Filter;9import javax.servlet.FilterChain;10import javax.servlet.FilterConfig;11import javax.servlet.ServletException;12import javax.servlet.ServletRequest;13import javax.servlet.ServletResponse;14import javax.servlet.http.HttpServletRequest;15import javax.servlet.http.HttpServletResponse;16import javax.servlet.http.HttpSession;1718public class LoginFilter implements Filter {1920public static List<String> pattenURL = new ArrayList<String>();2122 @Override23public void destroy() {24// TODO Auto-generated method stub2526 }2728 @Override29public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)30throws IOException, ServletException {3132 HttpServletRequest httpRequest = (HttpServletRequest) request;33 HttpServletResponse httpResponse = (HttpServletResponse) response;34 HttpSession session = httpRequest.getSession();35// 登陆url36 String loginUrl = httpRequest.getContextPath() + "/login.jsp";37 String url = httpRequest.getRequestURI().toString();3839// 注:在pattenURL中的全部不拦截 url.indexOf(urlStr) > -1 表⽰urlStr在url中出现过,出现就不拦截40for (String urlStr : pattenURL) {41if (url.indexOf(urlStr) > -1) {42 chain.doFilter(request, response);43return;44 }45 }4647//超时处理,ajax请求超时设置超时状态,页⾯请求超时则返回提⽰并重定向,session.getAttribute("")是获取到登录⼈的session信息48if (session.getAttribute("") == null) {49// 判断是否为ajax请求50if (httpRequest.getHeader("x-requested-with") != null51 && httpRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {52 httpResponse.addHeader("sessionstatus", "timeOut"); // 返回超时标识53 httpResponse.addHeader("loginPath", loginUrl);// 返回url54 chain.doFilter(request, response);// 不可少,否则请求会出错55 } else {56// alert('会话过期,请重新登录');57 String str = "<script language='javascript'>" + "window.top.location.href='" + loginUrl + "';</script>";58 response.setContentType("text/html;charset=UTF-8");// 解决中⽂乱码59try {60 PrintWriter writer = response.getWriter();61 writer.write(str);62 writer.flush();63 writer.close();64 } catch (Exception e) {65 e.printStackTrace();66 }67 }68 } else {69 chain.doFilter(request, response);70 }71 }7273/**74 * 过滤器初始化调⽤⽅法在pattenURL中的全部不拦截,所以上⾯会使⽤:path.indexOf(urlStr) > -175*/76 @Override77public void init(FilterConfig config) throws ServletException {78 pattenURL.add("login.jsp");// 登录jsp79 pattenURL.add("login.do");// 登录⽅法80 pattenURL.add("css");// css81 pattenURL.add("image");// image82 pattenURL.add("js");// js83 pattenURL.add("fonts");// fonts8485 }8687 } 在web.xml中注册过滤器1<?xml version="1.0" encoding="UTF-8"?>2<web-app version="3.0" xmlns="/xml/ns/javaee"3 xmlns:xsi="/2001/XMLSchema-instance"4 xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_0.xsd">56<display-name>test-login</display-name>78<!-- 登录过滤器 -->9<filter>10<description>登录过滤器</description>11<filter-name>loginFilter</filter-name>12<filter-class>com.test.login.LoginFilter</filter-class>13</filter>14<filter-mapping>15<filter-name>loginFilter</filter-name>16<url-pattern>/*</url-pattern>17</filter-mapping>1819<welcome-file-list>20<welcome-file>index.jsp</welcome-file>21</welcome-file-list>2223</web-app> 引⼊⼀个全局的js。

java 单点登录实现方案

java 单点登录实现方案Java单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户使用一组凭据(如用户名和密码)登录到多个相关的应用程序或系统,而无需在每个应用程序中单独进行身份验证。

本文将介绍Java单点登录的实现方案。

在实现Java单点登录时,可以采用以下方案:1. 基于Token的认证方案:这是目前较为常见的单点登录实现方案之一。

用户在登录成功后,后台生成一个Token,将其返回给用户,并存储在服务器端。

用户在访问其他应用程序时,将Token作为身份凭证发送到服务器端进行验证。

服务器端通过验证Token的有效性来判断用户的身份。

常见的Token生成方式包括JWT(JSON Web Token)和OAuth2.0。

2. 基于代理的认证方案:该方案使用一个代理服务器来处理用户的身份验证。

用户在登录成功后,代理服务器会为用户生成一个身份标识,并将其存储在Cookie中。

当用户访问其他应用程序时,请求会先发送到代理服务器,代理服务器会验证用户的身份,并将请求转发给相应的应用程序。

3. 基于Session的认证方案:该方案使用Java的Session机制来实现单点登录。

用户在登录成功后,后台会为用户创建一个Session,并将Session的ID存储在Cookie中。

当用户访问其他应用程序时,应用程序会通过Cookie中的Session ID来验证用户的身份。

无论采用哪种方案,Java单点登录的实现步骤大致相同:1. 用户登录:用户在登录页面输入用户名和密码进行登录。

后台验证用户的凭据是否正确,如果正确则进行下一步操作。

2. 生成身份凭证:在用户登录成功后,后台会生成一个身份凭证(Token、身份标识或Session),并将其返回给用户。

3. 存储身份凭证:服务器端会将生成的身份凭证存储起来,可以存储在数据库、缓存或服务器内存中。

4. 跨应用程序身份验证:当用户访问其他应用程序时,应用程序会验证用户的身份凭证的有效性。

完成一个IDEAweb项目(二)登录功能实现

完成⼀个IDEAweb项⽬(⼆)登录功能实现(⼆)登录功能实现1. 编写前端页⾯若jsp页⾯中⽂乱码:在jsp中指定页⾯显⽰的编码为GBK添加page命令<%@ page language="java" contentType="text/html; charset=GBK" %>*其他所有出现编码的地⽅也要改掉2. 编写login.jsp,并设置为⾸页login.jsp<%@ page language="java" contentType="text/html; charset=GBK" %><!DOCTYPE html><html lang="en"><head><meta charset="GBK"><title>⽤户登录</title></head><body><form action="${pageContext.request.contextPath}/studentServlet" method="post"><div class="errorInfo">${error}</div><p>学号:<input type="text" size="20" name="stuNo"></p><p>密码:<input type="password" size="20" name="stuPwd"></p><p><input type="submit" value="登录"></p></form></body></html>设置为⾸页:web.xml添加<!-- 设置欢迎页⾯ --><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list>3. 编写dao层⽤户登陆的接⼝StudentDaopublic interface StudentDao {//得到要登录的研究⽣public Student getLoginStudent(Connection conn,String stuNo) throws SQLException;}4. 编写dao接⼝的实现层StudentDaoImplpackage dao.student;import dao.BaseDao;import domain.Student;import org.junit.Test;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class StudentDaoImpl implements StudentDao {@Overridepublic Student getLoginStudent(Connection conn, String stuNo) throws SQLException { PreparedStatement ps = null;ResultSet rs = null;Student stu = null;if (conn != null) {String sql = "select * from student where stu_no=?";Object[] params = {stuNo};rs = BaseDao.executeQuery(conn, sql, params, ps, rs);if (rs.next()) {stu = new Student();stu.setStuNo(rs.getString(1));stu.setPassword(rs.getString(2));stu.setStuName(rs.getString(3));stu.setSpecialty(rs.getString(4));stu.setSex(rs.getBoolean(5));stu.setBirth(rs.getDate(6));stu.setPhone(rs.getString(7));stu.setEmail(rs.getString(8));stu.setGradSchoolCode(rs.getString(9));stu.setGradSchoolName(rs.getString(10));stu.setGradSpecCode(rs.getString(11));stu.setGradSpecName(rs.getString(12));}BaseDao.closeResource(null, ps, rs);}return stu;}}5. 业务层接⼝StudentServicepublic interface StudentService {/*** 验证是否登录成功** @return 登录成功则返回⽤户对象,⽆则null*/public Student isLogin(String stuNo, String pwd) throws SQLException;}6. 业务层实现类StudentServiceImplpublic class StudentServiceImpl implements StudentService {private StudentDao studentDao;public StudentServiceImpl() {studentDao = new StudentDaoImpl();}/*** 验证是否登录成功** @return 有登录成功则返回⽤户对象,⽆则null*/@Overridepublic Student isLogin(String stuNo, String pwd) {Connection conn = null;Student stu = null;try {conn = BaseDao.getConnection();stu = studentDao.getLoginStudent(conn, stuNo);if (stu != null) {if (!pwd.equals(stu.getPassword()))stu = null;}} catch (SQLException e) {e.printStackTrace();} finally {BaseDao.closeResource(conn, null, null);}return stu;}}7. 编写ServletStudentServlet记得添加@WebServlet注解@WebServlet("/studentServlet")public class StudentServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取客户端提交的数据String stuNo = req.getParameter("stuNo");String stuPwd = req.getParameter("stuPwd");try {StudentService studentService = new StudentServiceImpl();Student stu = studentService.isLogin(stuNo, stuPwd);if (stu != null) { //有该⽤户,存进session,跳转到查看导师页⾯HttpSession session = req.getSession();session.setAttribute(Constants.STUDENT_SESSION, stu);resp.sendRedirect("stu_check_tutor.jsp");} else { //⽆该⽤户,跳转⾄登录页⾯,并提⽰错误信息req.setAttribute("error", "⽤户名或密码不正确");req.getRequestDispatcher("login.jsp").forward(req, resp);System.out.println("结束Servlet....");}} catch (SQLException e) {e.printStackTrace();}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档