java登录验证(java登录验证代码)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
今天给各位分享java登录验证的知识,其中也会对java登录验证代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
- 1、java web 验证用户是否已登录有哪些方式。
- 2、java链接mysql数据库实现登陆如何验证?
- 3、怎样用java实现验证码
- 4、java登录模块验证出现问题求解答
- 5、JAVA问题:实现用户登录身份验证功能拜托了各位 谢谢
- 6、在JAVA里,用户登录,系统对输入的用户名和密码验证,验证次数最多三次正确的赢户名密码自己输入
java web 验证用户是否已登录有哪些方式。
首先,你的web需要有登入后将登录信息保存到session的过程,在用户访问那些需要登录的页面或者action的时候(可以用过过滤器,或者直接在相应的页面判断),从session里面获取登录信息,如果没有,则说明没有登录.跳转到登录页面后,登陆成功,保存登录信息到session,这个时候再访问原先的,就可以通过验证..一整个流程大概就是这样.重点就是登录信息保存在session里面,验证用户是否登录,就依据这个了
java链接mysql数据库实现登陆如何验证?
//这是我以前写的核对数据库实现登陆的方法,你只看jdbc部分就好,我还特地给你加了点注释\x0d\x0aString sql = "select username,password from account";\x0d\x0aString user = request.getParameter("user");\x0d\x0aString pass = request.getParameter("password");\x0d\x0aint j = 0;\x0d\x0aConnection conn = null;\x0d\x0aPreparedStatement ps = null;\x0d\x0aResultSet rs = null;\x0d\x0atry {\x0d\x0aconn = JDBCTools1.getConnection();\x0d\x0aps = conn.prepareStatement(sql);\x0d\x0ars = ps.executeQuery();\x0d\x0a//从表中查询获取所有账户的用户名密码的ResultSet 对象\x0d\x0awhile(rs.next()){\x0d\x0aint i = 0;\x0d\x0a\x0d\x0aString username[] = new String[10];//用户名数组\x0d\x0aString password[] = new String[10];//密码数组\x0d\x0ausername[i] = rs.getString(1);\x0d\x0apassword[i] = rs.getString(2);\x0d\x0aif(user.equals(username[i])pass.equals(password[i])){//比对\x0d\x0aresponse.getWriter().print("you are welcome!");\x0d\x0aj++;\x0d\x0a}else if(user.equals(username[i])!pass.equals(password[i])){\x0d\x0aresponse.getWriter().println("the realy password is :"+ username[i] +","+password[i]+"\r\n");\x0d\x0aresponse.getWriter().println("and you password is :"+user +","+pass+" :so the username or password may not right");\x0d\x0aj++;\x0d\x0a}else{\x0d\x0acontinue;\x0d\x0a}\x0d\x0ai++;\x0d\x0a}\x0d\x0aif(j == 0){\x0d\x0aresponse.getWriter().println("Your username may not be properly");\x0d\x0a}\x0d\x0a} catch (Exception e) {\x0d\x0ae.printStackTrace();\x0d\x0a}finally{\x0d\x0aJDBCTools1.release(rs, ps, conn);\x0d\x0a}\x0d\x0a//这是我JDBCTools的getConnection方法\x0d\x0agetConnection{\x0d\x0aString driverClass = oracle.jdbc.driver.OracleDriver;\x0d\x0aString jdbcUrl = jdbc:oracle:thin:@localhost:1521:orcl;\x0d\x0a//你的数据库的用户名密码\x0d\x0aString user = null;\x0d\x0aString password = null;\x0d\x0a// 通过反射创建Driver对象\x0d\x0aClass.forName(driverClass);\x0d\x0areturn DriverManager.getConnection(jdbcUrl, user, password);}\x0d\x0a//这是我JDBCTools的release方法\x0d\x0apublic static void release(ResultSet rs, Statement statement,\x0d\x0aConnection conn) {\x0d\x0aif (rs != null) {\x0d\x0atry {\x0d\x0ars.close();\x0d\x0a} catch (SQLException e) {\x0d\x0ae.printStackTrace();\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0aif (statement != null) {\x0d\x0atry {\x0d\x0astatement.close();\x0d\x0a} catch (Exception e2) {\x0d\x0ae2.printStackTrace();\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0aif (conn != null) {\x0d\x0atry {\x0d\x0aconn.close();\x0d\x0a} catch (Exception e2) {\x0d\x0ae2.printStackTrace();\x0d\x0a}\x0d\x0a}\x0d\x0a}

怎样用java实现验证码
现在许多系统的注册 登录或者发布信息模块都添加的随机验证码功能 就是为了避免自动注册程序或者自动发布程序的使用
验证码实际上就是随机选择一些字符以图片的形式展现在页面上 如果进行提交操作的同时需要将图片上的字符同时提交 如果提交的字符与服务器session保存的不同 则认为提交信息无效 为了避免自动程序分析解析图片 通常会在图片上随机生成一些干扰线或者将字符进行扭曲 增加自动识别验证码的难度
在这里 我们使用java实现验证码
%@ page contentType= image/jpeg import= java awt * java awt image * java util * javax imageio * %
%!
Color getRandColor(int fc int bc){//给定范围获得随机颜色
Random random = new Random();
if(fc ) fc= ;
if(bc ) bc= ;
int r=fc+random nextInt(bc fc);
int g=fc+random nextInt(bc fc);
int b=fc+random nextInt(bc fc);
return new Color(r g b);
}
%
%
//设置页面不缓存
response setHeader( Pragma No cache );
response setHeader( Cache Control no cache );
response setDateHeader( Expires );
// 在内存中创建图象
int width= height= ;
BufferedImage image = new BufferedImage(width height BufferedImage TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image getGraphics();
//生成随机类
Random random = new Random();
// 设定背景色
g setColor(getRandColor( ));
g fillRect( width height);
//设定字体
g setFont(new Font( Times New Roman Font PLAIN ));
// 随机产生 条干扰线 使图象中的认证码不易被其它程序探测到
g setColor(getRandColor( ));
for (int i= ;i ;i++)
{
int x = random nextInt(width);
int y = random nextInt(height);
int xl = random nextInt( );
int yl = random nextInt( );
g drawLine(x y x+xl y+yl);
}
// 取随机产生的认证码( 位数字)
String codeList = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ;
String sRand= ;
for (int i= ;i ;i++){
int a=random nextInt(codeList length() );
String rand=codeList substring(a a+ );
sRand+=rand;
// 将认证码显示到图象中
g setColor(new Color( +random nextInt( ) +random nextInt( ) +random nextInt( )));//调用函数出来的颜色相同 可能是因为种子太接近 所以只能直接生成
g drawString(rand *i+ );
}
// 将认证码存入SESSION
session setAttribute( rand sRand);
// 图象生效
g dispose();
// 输出图象到页面
ImageIO write(image JPEG response getOutputStream());
out clear();
out = pageContext pushBody();
lishixinzhi/Article/program/Java/hx/201311/25536
java登录模块验证出现问题求解答
前期准备
首先要先明确有个大体的思路,要实现什么样的功能,了解完成整个模块要运用到哪些方面的知识,以及从做的过程中去发现自己的不足。技术方面的进步大都都需要从实践中出来的。
功能:用户注册功能+系统登录功能+生成验证码
知识:窗体设计、数据库设计、JavaBean封装属性、JDBC实现对数据库的连接、验证码(包括彩色验证码)生成技术,还有就些比如像使用正则表达式校验用户注册信息、随机获得字符串、对文本可用字符数的控制等
设计的模块预览图:
彩色验证码预览图:
所用数据库:MySQL
数据库设计
创建一个数据库db_database01,其中包含一个表格tb_user,用来保存用户的注册的数据。
其中包含4个字段
id int(11)
username varchar(15)
password varchar(20)
email varchar(45)
MySQL语句可以这样设计:
create schema db_database01;
use db_database01;
create table tb_user(
id int(11) not null auto_increment primary key,
username varchar(15) not null,
password varchar(20) not null,
email varchar(45) not null
);
insert into tb_user values(1,"lixiyu","lixiyu",lixiyu419@gmail.com);
这样把lixiyu作为用户名。
select语句检查一下所建立的表格:
编写JavaBean封装用户属性
package com.lixiyu.model;
public class User {
private int id;// 编号
private String username;// 用户名
private String password;// 密码
private String email;// 电子邮箱
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
编写JDBC工具类
将与数据库操作相关的代码放置在DBConfig接口和DBHelper类中
DBConfig接口用于保存数据库、用户名和密码信息
代码:
package com.lixiyu.util;
public interface DBConfig {
String databaseName = "db_database01";// 数据库名称
String username = "root";// 数据库用户名
String password = "lixiyu";// 数据库密码
}
为简化JDBC开发,DBHelper使用了了Commons DbUtil组合。
DBHelper类继承了DBConfig接口,该类中包含4种方法:
(1)getConnection()方法:获得数据库连接,使用MySQL数据源来简化编程,避免因加载数据库驱动而发生异常。
(2)exists()方法:判断输入的用户名是否存在。
(3)check()方法:当用户输入用户名和密码,查询使用check()方法是否正确。
(4)save()方法:用户输入合法注册信息后,,将信息进行保存。
详细代码:
package com.lixiyu.util;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.apache.commons.lang.StringEscapeUtils;
import com.lixiyu.model.User;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
public class DBHelper implements DBConfig {
/*
* 使用MySQL数据源获得数据库连接对象
*
* @return:MySQL连接对象,如果获得失败返回null
*/
public static Connection getConnection() {
MysqlDataSource mds = new MysqlDataSource();// 创建MySQL数据源
mds.setDatabaseName(databaseName);// 设置数据库名称
mds.setUser(username);// 设置数据库用户名
mds.setPassword(password);// 设置数据库密码
try {
return mds.getConnection();// 获得连接
} catch (SQLException e) {
e.printStackTrace();
}
return null;// 如果获取失败就返回null
}
/*
* 判断指定用户名的用户是否存在
*
* @return:如果存在返回true,不存在或者查询失败返回false
*/
public static boolean exists(String username) {
QueryRunner runner = new QueryRunner();// 创建QueryRunner对象
String sql = "select id from tb_user where username = '" + username + "';";// 定义查询语句
Connection conn = getConnection();// 获得连接
ResultSetHandlerListObject rsh = new ColumnListHandler();// 创建结果集处理类
try {
ListObject result = runner.query(conn, sql, rsh);// 获得查询结果
if (result.size() 0) {// 如果列表中存在数据
return true;// 返回true
} else {// 如果列表中没有数据
return false;// 返回false
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);// 关闭连接
}
return false;// 如果发生异常返回false
}
/*
* 验证用户名和密码是否正确 使用Commons Lang组件转义字符串避免SQL注入
*
* @return:如果正确返回true,错误返回false
*/
public static boolean check(String username, char[] password) {
username = StringEscapeUtils.escapeSql(username);// 将用户输入的用户名转义
QueryRunner runner = new QueryRunner();// 创建QueryRunner对象
String sql = "select password from tb_user where username = '" + username + "';";// 定义查询语句
Connection conn = getConnection();// 获得连接
ResultSetHandlerObject rsh = new ScalarHandler();// 创建结果集处理类
try {
String result = (String) runner.query(conn, sql, rsh);// 获得查询结果
char[] queryPassword = result.toCharArray();// 将查询到得密码转换成字符数组
if (Arrays.equals(password, queryPassword)) {// 如果密码相同则返回true
Arrays.fill(password, '0');// 清空传入的密码
Arrays.fill(queryPassword, '0');// 清空查询的密码
return true;
} else {// 如果密码不同则返回false
Arrays.fill(password, '0');// 清空传入的密码
Arrays.fill(queryPassword, '0');// 清空查询的密码
return false;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);// 关闭连接
}
return false;// 如果发生异常返回false
}
/*
* 保存用户输入的注册信息
*
* @return:如果保存成功返回true,保存失败返回false
*/
public static boolean save(User user) {
QueryRunner runner = new QueryRunner();// 创建QueryRunner对象
String sql = "insert into tb_user (username, password, email) values (?, ?, ?);";// 定义查询语句
Connection conn = getConnection();// 获得连接
Object[] params = { user.getUsername(), user.getPassword(), user.getEmail() };// 获得传递的参数
try {
int result = runner.update(conn, sql, params);// 保存用户
if (result 0) {// 如果保存成功返回true
return true;
} else {// 如果保存失败返回false
return false;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);// 关闭连接
}
return false;// 如果发生异常返回false
}
}
系统登录
1.1窗体设计
使用BoxLayout布局,将控件排列方式设置从上至下:
复制代码代码如下:
contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.PAGE_AXIS));
窗体使用了标签、文本域、密码域和按钮等控件
实现代码:
public class login extends JFrame{
private static final long serialVersionUID = -4655235896173916415L;
private JPanel contentPane;
private JTextField usernameTextField;
private JPasswordField passwordField;
private JTextField validateTextField;
private String randomText;
public static void main(String args[]){
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Throwable e) {
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable(){
public void run(){
try{
login frame=new login();
frame.setVisible(true);
}catch(Exception e){
e.printStackTrace();
}
}
});
}
public login(){
setTitle("系统登录");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane=new JPanel();
setContentPane(contentPane);
contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.PAGE_AXIS));
JPanel usernamePanel=new JPanel();
contentPane.add(usernamePanel);
JLabel usernameLable=new JLabel("\u7528\u6237\u540D\uFF1A");
usernameLable.setFont(new Font("微软雅黑", Font.PLAIN, 15));
usernamePanel.add(usernameLable);
usernameTextField=new JTextField();
usernameTextField.setFont(new Font("微软雅黑", Font.PLAIN, 15));
usernamePanel.add(usernameTextField);
usernameTextField.setColumns(10);
JPanel passwordPanel = new JPanel();
contentPane.add(passwordPanel);
JLabel passwordLabel = new JLabel("\u5BC6 \u7801\uFF1A");
passwordLabel.setFont(new Font("微软雅黑", Font.PLAIN, 15));
passwordPanel.add(passwordLabel);
passwordField = new JPasswordField();
passwordField.setColumns(10);
passwordField.setFont(new Font("微软雅黑", Font.PLAIN, 15));
passwordPanel.add(passwordField);
JPanel validatePanel = new JPanel();
contentPane.add(validatePanel);
JLabel validateLabel = new JLabel("\u9A8C\u8BC1\u7801\uFF1A");
validateLabel.setFont(new Font("微软雅黑", Font.PLAIN, 15));
validatePanel.add(validateLabel);
validateTextField = new JTextField();
validateTextField.setFont(new Font("微软雅黑", Font.PLAIN, 15));
validatePanel.add(validateTextField);
validateTextField.setColumns(5);
randomText = RandomStringUtils.randomAlphanumeric(4);
CAPTCHALabel label = new CAPTCHALabel(randomText);//随机验证码
label.setFont(new Font("微软雅黑", Font.PLAIN, 15));
validatePanel.add(label);
JPanel buttonPanel=new JPanel();
contentPane.add(buttonPanel);
JButton submitButton=new JButton("登录");
submitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
do_submitButton_actionPerformed(e);
}
});
submitButton.setFont(new Font("微软雅黑", Font.PLAIN, 15));
buttonPanel.add(submitButton);
JButton cancelButton=new JButton("退出");
cancelButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
do_cancelButton_actionPerformed(e);
}
});
cancelButton.setFont(new Font("微软雅黑",Font.PLAIN,15));
buttonPanel.add(cancelButton);
pack();// 自动调整窗体大小
setLocation(com.lixiyu.util.SwingUtil.centreContainer(getSize()));// 让窗体居中显示
}
窗体居中显示:
public class SwingUtil {
/*
* 根据容器的大小,计算居中显示时左上角坐标
*
* @return 容器左上角坐标
*/
public static Point centreContainer(Dimension size) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();// 获得屏幕大小
int x = (screenSize.width - size.width) / 2;// 计算左上角的x坐标
int y = (screenSize.height - size.height) / 2;// 计算左上角的y坐标
return new Point(x, y);// 返回左上角坐标
}
}
1.2获取及绘制验证码
public class CAPTCHALabel extends JLabel {
private static final long serialVersionUID = -963570191302793615L;
private String text;// 用于保存生成验证图片的字符串
public CAPTCHALabel(String text) {
this.text = text;
setPreferredSize(new Dimension(60, 36));// 设置标签的大小
}
@Override
public void paint(Graphics g) {
super.paint(g);// 调用父类的构造方法
g.setFont(new Font("微软雅黑", Font.PLAIN, 16));// 设置字体
g.drawString(text, 5, 25);// 绘制字符串
}
}
*彩色验证码:
public class ColorfulCAPTCHALabel extends JLabel {
private static final long serialVersionUID = -963570191302793615L;
private String text;// 用于保存生成验证图片的字符串
private Color[] colors = { Color.BLACK, Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color.GRAY, Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE,
Color.PINK, Color.RED, Color.WHITE, Color.YELLOW };// 定义画笔颜色数组
public ColorfulCAPTCHALabel(String text) {
this.text = text;
setPreferredSize(new Dimension(60, 36));// 设置标签的大小
}
@Override
public void paint(Graphics g) {
super.paint(g);// 调用父类的构造方法
g.setFont(new Font("微软雅黑", Font.PLAIN, 16));// 设置字体
for (int i = 0; i text.length(); i++) {
g.setColor(colors[RandomUtils.nextInt(colors.length)]);
g.drawString("" + text.charAt(i), 5 + i * 13, 25);// 绘制字符串
}
}
}
1
JAVA问题:实现用户登录身份验证功能拜托了各位 谢谢
这是问题1后台的,我实在不愿意从头到尾都帮你写了,希望这段代码能给你启发,有问题可以问,可是你这样把所有问题都抛出来,实在对你的学习不利,希望你明白这个道理 package com.long1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class MyJdbc { private Connection con = null; private PreparedStatement ps = null; private Statement st = null; private ResultSet rs = null; private String url = "jdbc:mysql://localhost:3306/snake_db1"; private String name = "root"; private String pass = "123456789"; private String driver = "com.mysql.jdbc.Driver"; public MyJdbc() { try { Class.forName(driver); } catch (Exception e) { e.printStackTrace(); } } private void open() { try { con = DriverManager.getConnection(url, name, pass); } catch (Exception e) { e.printStackTrace(); } } public ListLogin query() { ArrayListLogin arr = null; try { open(); st = con.createStatement(); rs = st.executeQuery("select * from login where flag!=0"); Login l = null; arr = new ArrayListLogin(); while (rs.next()) { l = new Login(); l.setId(rs.getInt(1)); l.setName(rs.getString(2)); l.setPass(rs.getString(3)); l.setFlag(rs.getString(4)); arr.add(l); } } catch (Exception e) { e.printStackTrace(); } finally { close(); } return arr; } public boolean check(String name, String pass) { boolean flag = false; try { open(); ps = con.prepareStatement("select id from login where name=? and pass=? and flag!=0"); ps.setString(1, name); ps.setString(2, pass); rs = ps.executeQuery(); if (rs.next()) { flag = true; } } catch (Exception e) { e.printStackTrace(); } finally { close(); } return flag; } private void close() { try { if (rs != null) { rs.close(); rs = null; } if (ps != null) { ps.close(); ps = null; } if (con != null) { con.close(); con = null; } } catch (Exception e) { e.printStackTrace(); } } }
在JAVA里,用户登录,系统对输入的用户名和密码验证,验证次数最多三次正确的赢户名密码自己输入
public static void main(String[] args) {
try {
int c = 0;
while (true) {
byte[] b1 = new byte[1024];
byte[] b2 = new byte[1024];
System.out.print("请输入用户名:");
int x = System.in.read(b1);
System.out.print("请输入密码:");
int y = System.in.read(b2);
String username = new String(b1, 0, x - 2);
String password = new String(b2, 0, y - 2);
if (username.equals("zhangsan") password.equals("123456")) {
System.out.println("登陆成功!!!");
break;
} else if(c2){
System.out.println();
System.out.println("登陆失败,请重新输入!!!");
}else{
System.out.println("对不起三次已过!!!");
System.exit(0);
}
c++;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
粗略的写了一个,希望对你有所帮助,
也希望你不是简单的抄代码应付习题,要把东西学到自己的脑子里。
关于java登录验证和java登录验证代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
