精华内容
下载资源
问答
  • java登录功能的实现
    千次阅读
    2021-04-27 13:53:08

    Java实现简单的登录功能,代码如下:

    import java.util.Scanner;
    public class 登录界面
    {
    
    	public static void main(String[] args)
    	{
    		int[] passwordBox=new int[] {123,124,125};
    		String[] userBox= {"xxx","许xx","迪迦"};
    		Scanner input=new Scanner(System.in);
    		System.out.println("请输入账号");
    		String user=input.nextLine();
    		System.out.println("请输入密码");
    		int password=input.nextInt();
    		boolean b=false;
    		for(int i=0;i<userBox.length;i++) {
    			if(userBox[i].equals(user)) {
    				if(passwordBox[i]==password) {
    					System.out.println("登录成功");
    					b=true;
    				}
    				break;
    			}
    		}
    		if(!b) {
    			System.out.println("账号或密码错误");
    		}
    		input.close();
    	}
    
    }

     

    更多相关内容
  • Java实现登录功能(一)

    千次阅读 2022-04-07 10:42:45
    Java实现登录功能(一) 文章目录Java实现登录功能(一)前言一、Token的认证流程及优点二、JWT1.MySQL2.Tomcat3.Redis4.Mongo5.Nacos6.RabbitMQ7.ElasticSearch8.Kibana总结 前言 刚开始学习Java的时候,你是否有...

    Java实现登录功能(一)



    前言

    刚开始学习Java的时候,你是否有过疑问,登录功能就是简单地查询数据库对比一下账号密码就行了吗?在进行权限认证的时候,又该怎么办呢?每次都在提交的表单上加上账号密码吗?在这种情况下又该怎么防止CSRF(跨站请求伪造)呢?
    以下介绍一种现在流行的基于JWT的Token认证实现的登录功能。


    一、Token的认证流程及优点

    认证流程:

    1.客户端发送带有用户名和密码参数的登录请求
    2.服务端收到请求,验证用户名和密码
    3.验证通过后,服务端签发Token并返回token给客户端
    4.客户端收到Token后存储到Cookie或者Storage等中
    5.客户端每次向服务端请求资源时需要在cookie或者header请求头中携带服务端签发的token
    6.服务端收到请求后验证客户端请求携带的token,如果验证通过就向客户端返回请求数据
    在这里插入图片描述

    一般情况下,Token是被Header请求头所携带的。
    有着以下优点:

    1.支持跨域:Cookie是无法跨域的,而Token可以放在header请求头发送,所以支持跨域。
    2.无状态:Token认证方式在服务端不需要像传统的Session认证方式那样去记录SessionId,因为Token本身包含了登录用户的信息,可以减轻服务端的压力。
    3.支持移动端、小程序:当客户端是非浏览器平台时,Cookie是不被支持的,此时采用在Header请求头携带Token的认证方式会显得简单
    4.能避免CSRF失效:由于CSRF依赖于Cookie,所以由Header请求头携带Token的认证方式不会发生CSRF,所以能避免CSRF

    说明

    CSRF——跨站请求伪造。其原理是通过伪造成其它内容的请求地址,诱导用户触发请求。如果用户在登录状态下触发请求,将会自动携带Cookie访问服务端,服务端接收请求后检查到Cookie内部的用户信息会认为是登录用户本人的操作。

    二、JWT

    JWT(JSON Web Token)是一种比较主流的使用规范。其结构分别由Header标头、Payload有效负载、Signature签名算法三部分组成。

    1.Header负责记录令牌类型、签名算法等。
    such as: {"alg":"HS256","type","JWT"}
    
    2.Payload负责声明一些标准以及携带一些用户信息
    {"userId":"1","username":"mayikt"}
    标准声明:
    	iss:JWT签发者
    	sub:JWT所面向的用户
    	aud:JWT的接收者
    	exp:JWT的过期时间,过期时间必须大于签发时间
    	nbf:JWT的生效时间
    	iat:JWT的签发时间
    	jti:JWT的唯一身份标识,避免重复
    自定义的声明:
    	一些不敏感的用户信息。
    such as: {"iss":"CJJ","sub":"custom","exp":"1640000000","iat":"1632000000","jti":"156sad54a615a4d56ad15a6sd15s8924","userId":"1"}
    
    3.Signature防止Token被篡改,加盐,确保安全性
    

    三、Java基于JWT实现登录功能

    1.引入pom依赖

            <dependency>
                <groupId>com.auth0</groupId>
                <artifactId>java-jwt</artifactId>
                <version>3.18.3</version>
            </dependency>
    

    2.编写JWT工具类

    import com.auth0.jwt.JWT;
    import com.auth0.jwt.JWTVerifier;
    import com.auth0.jwt.algorithms.Algorithm;
    import com.auth0.jwt.exceptions.JWTDecodeException;
    import com.auth0.jwt.interfaces.DecodedJWT;
    import com.example.demo.domain.User;
    
    import java.io.UnsupportedEncodingException;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    public class JWTUtil {
        //token有效时长
        private static final long EXPIRE=30*60*1000L;
        //token的密钥 可自行定义
        private static final String SECRET="jwt";
    
    
        public static String createToken(User user) throws UnsupportedEncodingException {
            //token过期时间
            Date date=new Date(System.currentTimeMillis()+EXPIRE);
    
            //jwt的header部分
            Map<String ,Object>map=new HashMap<>();
            map.put("alg","HS256");
            map.put("typ","JWT");
    
            //使用jwt的api生成token
            String token= JWT.create()
                    .withHeader(map)
                    .withClaim("username", user.getUsername())//私有声明
                    .withExpiresAt(date)//过期时间
                    .withIssuedAt(new Date())//签发时间
                    .sign(Algorithm.HMAC256(SECRET));//签名
            return token;
        }
    
        /**
         * 校验token的有效性
         * 1 token的header和payload是否没改过
         * 2 没有过期
         */
        public static boolean verify(String token){
            try {
                //解密
                JWTVerifier verifier=JWT.require(Algorithm.HMAC256(SECRET)).build();
                verifier.verify(token);
                return true;
            }catch (Exception e){
                return false;
            }
        }
        //无需解密也可以获取token的信息
        public static String getUsername(String token){
            try {
                DecodedJWT jwt = JWT.decode(token);
                return jwt.getClaim("username").asString();
            } catch (JWTDecodeException e) {
                return null;
            }
        }
    }
    

    3.编写登录接口

    domain、mapper、service层请自行编写,其中Result类是统一返回结果集类

    import com.example.demo.domain.User;
    import com.example.demo.service.UserService;
    import com.example.demo.utils.JWTUtil;
    import com.example.demo.utils.Result;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.io.UnsupportedEncodingException;
    
    @RestController
    public class LoginController {
    
        @Autowired
        private UserService userService;
    
        @PostMapping("/login")
        public Result login(@RequestParam String username, @RequestParam String password) throws UnsupportedEncodingException {
            User user=userService.getUserByPass(username, password);
            if(user == null){
            	return Result.fail("用户名或密码错误");
            }
            //登录成功则调用JWTUtil类的创建Token方法返回客户端
            String token= JWTUtil.createToken(user);
            return Result.succ(200,"登陆成功",token);
        }
        
    }
    

    4.Java后端校验Token测试

    import com.example.demo.utils.Result;
    import com.example.demo.utils.JWTUtil;
    import javax.servlet.http.HttpServletRequest;
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @GetMapping("/test")
        public Result test(HttpServletRequest request){
        	String token=req.getHeader("Authorization");
        	if(token == null){
        		return Result.fail("尚未登录");
        	}
        	//获取到token中的用户信息
        	System.out.println(JWTUtil.getUsername(token));
        	//可自行编写获取用户信息后的操作
        	//......
        	
            return Result.succ("test");
        }
        
    }
    

    此处仅进行测试,后续博客将介绍安全框架搭配使用。

    5.Vue登录页面中的存储Token方法

    methods: {
        submitLogin() {
          this.$refs.loginForm.validate((valid) => {
            if (valid) {
              this.loading = true
              this.postRequest('/login', this.loginForm, 'form').then((resp) => {
                if (resp) {
                  // 存储用户token
                  const tokenStr = resp.obj.tokenHead + resp.obj.token
                  window.sessionStorage.setItem('tokenStr', tokenStr)
    
                  let path = this.$route.query.redirect
                  this.$router.replace(
                    path == '/' || path == undefined ? '/home' : path
                  )
                }
              })
            } else {
              this.$message.error('你还有未填写的信息')
              return false
            }
          })
        },
      },
    

    6.Vue前端每次请求资源携带Token方法

    import axios from 'axios'
    // 请求拦截器
    axios.interceptors.request.use(config => {
            if (window.sessionStorage.getItem('tokenStr')) {
                //请求携带自定义token
                config.headers['Authorization'] =
                    window.sessionStorage.getItem('tokenStr');
            }
            return config
        }, error => {
            console.log(error);
        })
    

    温馨提示:
    遇到报错跨域问题可参考 解决跨域问题


    总结

    本文简单地介绍了基于JWT的Token认证方式实现的登录功能。

    展开全文
  • 使用Java代码实现登录注册功能

    千次阅读 2021-03-09 18:32:52
    实现思路:分别创建5个包和5个类{cn.f.pojo(User.java);cn.f.Dao(UserDao.java);cn.f.Dao.impl(UserDaoImpl.java); cn.f.game(GuessNumber.java); cn.f.test(UserTest.java)}第一步:封装cn.f.pojo(User.java)类...

    实现思路:分别创建5个包和5个类{cn.f.pojo(User.java);cn.f.Dao(UserDao.java);cn.f.Dao.impl(UserDaoImpl.java); cn.f.game(GuessNumber.java);  cn.f.test(UserTest.java)}

    第一步:

    封装cn.f.pojo(User.java)类

    代码:

    package cn.f.pojo;

    public class User {

    private String name;

    private String mima;

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public String getMima() {

    return mima;

    }

    public void setMima(String mima) {

    this.mima = mima;

    }

    public User(String name, String mima) {

    super();

    this.name = name;

    this.mima = mima;

    }

    public User() {

    super();

    }

    @Override

    public String toString() {

    return "User [name=" + name + ", mima=" + mima + "]";

    }

    }

    第二步:

    创建一个用户登录注册接口cn.f.Dao(UserDao.java)

    代码:

    package cn.f.Dao;

    import cn.f.pojo.User;

    public interface UserDao {

    //    这是登陆功能

    public abstract boolean isLogin(String name,String mima);

    //这是注册功能

    public abstract void regist(User user);

    }

    第三步:

    创建一个实现用户登录注册功能实现类cn.f.Dao.impl(UserDaoImpl.java)

    代码:

    package cn.f.Dao.impl;

    import java.util.ArrayList;

    import cn.f.Dao.UserDao;

    import cn.f.pojo.User;

    //这是用户操作具体实现类

    public class UserDaoImpl implements UserDao {

    // 为了让多个方法能够使用一个集合,就把集合定义为成员变量

    // 为了不让外人看到,就用private

    // 为了让多个对象共享同一个成员变量用static

    private static ArrayList u = new ArrayList();

    @Override

    public boolean isLogin(String name, String mima) {

    // 遍历集合,获取每一个用户,并判断该用户名和密码是否和传递过来的匹配

    boolean flag = false;

    for (User s : u) {

    if (s.getName().equals(name) && s.getMima().equals(mima)) {

    flag = true;

    break;

    }

    }

    return flag;

    }

    @Override

    public void regist(User user) {

    // 把用户信息存储集合

    u.add(user);

    }

    }

    第四步:

    增加用户体验用户注册登录成功后给用户玩个小游戏cn.f.game(GuessNumber.java)

    代码:

    package cn.f.game;

    import java.util.Scanner;

    public class GuessNumber {

    private GuessNumber() {

    }

    public static void strat() {

    // 产生一个随机数

    int number = (int) (Math.random() * 100) + 1;

    // 定义一个统计变量

    int count = 0;

    while (true) {

    Scanner sc = new Scanner(System.in);

    System.out.println("请输入数据(1-100):");

    int guessNumber = sc.nextInt();

    count++;

    // 判断

    if (guessNumber > number) {

    System.out.println("你猜的数据" + guessNumber + "大了");

    } else if (guessNumber < number) {

    System.out.println("你猜的数据" + guessNumber + "小了");

    } else {

    System.out.println("恭喜你,"+count+"次猜中了!");

    break;

    }

    }

    }

    }

    第五步:

    实现用户登录注册功能测试cn.f.test(UserTest.java)

    代码:

    package cn.f.test;

    import java.util.Scanner;

    import cn.f.Dao.UserDao;

    import cn.f.Dao.impl.UserDaoImpl;

    import cn.f.game.GuessNumber;

    import cn.f.pojo.User;

    public class UserTest {

    static Scanner sc = new Scanner(System.in);

    // 多态

    static UserDao ud = new UserDaoImpl();

    public static void main(String[] args) {

    while (true) {

    // 欢迎界面,给出选项

    System.out.println("-------------欢迎光临--------------");

    System.out.println("1.登录");

    System.out.println("2.注册");

    System.out.println("3.退出");

    System.out.println("请输入你的选择:");

    // 键盘录入选择,根据选择做出不同的操作

    // 为了后面录入信息的方便,我所有的数据录入全部用字符接受

    String m = sc.nextLine();

    switch (m) {

    case "1":

    denglu();

    break;

    case "2":

    zhuce();

    break;

    case "3":

    default:

    System.out.println("谢谢使用,欢迎下次再来!");

    System.exit(0);

    }

    }

    }

    public static void denglu() {

    System.out.println("-------------登录界面(请先注册后再登录!)--------------");

    System.out.println("请输入用户名:");

    String n = sc.nextLine();

    System.out.println("请输入密码:");

    String p = sc.nextLine();

    // 调用登录功能

    boolean flag = ud.isLogin(n, p);

    if (flag) {

    System.out.println("登录成功!奖励你玩游戏。");

    System.out.println("你要玩吗?y/n");

    while (true) {

    String r = sc.nextLine();

    if (r.equalsIgnoreCase("y")) {

    // 玩游戏

    GuessNumber.strat();

    System.out.println("是否继续游戏?y/n");

    }else{

    break;

    }

    }

    System.out.println("谢谢使用,欢迎下次再来!");

    System.exit(0);

    } else {

    System.out.println("用户名或者密码有误,登录失败!");

    }

    }

    public static void zhuce() {

    // 注册界面,请输入用户名和密码

    System.out.println("-------------注册界面--------------");

    System.out.println("请输入用户名:");

    String name = sc.nextLine();

    System.out.println("请输入密码:");

    String mima = sc.nextLine();

    // 把用户名和密码封装到一个对象中

    User user = new User();

    user.setName(name);

    user.setMima(mima);

    // 调用注册功能

    ud.regist(user);

    System.out.println("注册成功!");

    }

    }

    代码运行结果:

    -------------欢迎光临--------------

    1.登录

    2.注册

    3.退出

    请输入你的选择:

    1

    -------------登录界面(请先注册后再登录!)--------------

    请输入用户名:

    232

    请输入密码:

    232

    用户名或者密码有误,登录失败!

    -------------欢迎光临--------------

    1.登录

    2.注册

    3.退出

    请输入你的选择:

    2

    -------------注册界面--------------

    请输入用户名:

    1234

    请输入密码:

    1234

    注册成功!

    -------------欢迎光临--------------

    1.登录

    2.注册

    3.退出

    请输入你的选择:

    1

    -------------登录界面(请先注册后再登录!)--------------

    请输入用户名:

    1234

    请输入密码:

    1234

    登录成功!奖励你玩游戏。

    你要玩吗?y/n

    y

    请输入数据(1-100):

    67

    你猜的数据67小了

    请输入数据(1-100):

    87

    你猜的数据87大了

    请输入数据(1-100):

    80

    你猜的数据80大了

    请输入数据(1-100):

    78

    你猜的数据78大了

    请输入数据(1-100):

    76

    你猜的数据76大了

    请输入数据(1-100):

    74

    你猜的数据74小了

    请输入数据(1-100):

    75

    恭喜你,7次猜中了!

    是否继续游戏?y/n

    n

    谢谢使用,欢迎下次再来!

    展开全文
  • JAVA实现QQ登录、注册等功能

    万次阅读 多人点赞 2022-05-09 19:54:29
    实现功能具体如下: 1、登录功能 2、注册功能 3、是否隐藏密码的选择以及实现功能 4、选择性别功能 5、密码与确认密码功能 6、登录页面实时展示当前的时间 7、当登录时用户名与密码在数据库中没有相匹配的...

    本文主要应用的技术有:GUI、JDBC、多线程

     实现的功能具体如下:

    1、登录功能

    2、注册功能

    3、是否隐藏密码的选择以及实现功能

    4、选择性别功能

    5、密码与确认密码功能

    6、登录页面实时展示当前的时间

    7、当登录时用户名与密码在数据库中没有相匹配的数据,则会跳转到注册页面上去。

    8、同样,注册完毕后,数据会运用JDBC将数据写入数据库中,然后跳转回登录页面。

     登录页面:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    import java.time.LocalTime;
    
    public class JDBC_登录功能 {
        public static void main(String[] args) {
            guitext3 gt=new guitext3();
           new Thread(new time1(gt.time)).start();//启动线程
    
        }
    }
    class guitext3 {
        JFrame jf;
        JLabel l1,l2,time;
        JTextField f1;
        JPasswordField f2;
        JButton jb1,jb2;
        JCheckBox jc;
        public guitext3() {
            jf = new JFrame("QQ登录窗口");
            jf.setSize(320,250);
            jf.setLocation(700,300);//设置窗口每次启动都显示在屏幕正中央
            jf.setLayout(null);
            Font font = new Font("仿宋", Font.BOLD, 20);//设置统一的字体,让代码更加整洁美观
            l1 = new JLabel("用户名:");
            l1.setBounds(10,10,100,40);
            l1.setFont(font);
            f1 = new JTextField(null,20);
            f1.setBounds(90,15,180,30);
            f1.setFont(font);
            l2 = new JLabel("密  码:");
            l2.setBounds(8,50,100,40);
            l2.setFont(font);
            f2=new JPasswordField(null,20);
            f2.setBounds(90,55,180,30);
            f2.setEchoChar('*');//设置密码的外显为*
            f2.setFont(font);
            jc=new JCheckBox("显示密码");
            jc.setBounds(230,130,80,40);
            jc.addItemListener(new ItemListener() {
                public void itemStateChanged(ItemEvent e) {
                    if (e.getStateChange() == ItemEvent.SELECTED) {//被选中
                        f2.setEchoChar((char) 0);
                    } else {
                        f2.setEchoChar('*');
                    }
                }
            });
            ActionListener listener=new AbstractAction() {
                @Override
                public void actionPerformed(ActionEvent e) {
    
                }
            };
            jc.addActionListener(listener);
            jb1 = new JButton("登录");
            jb1.setBounds(30,100,80,40);
            time=new JLabel();
            time.setBounds(30,150,140,40);
            time.setFont(font);
            //匿名内部类
            jb1.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    Statement st=null;
                    Connection con=null;
                    ResultSet rs=null;
                    try {
                        //注册驱动
                        Class.forName("com.mysql.cj.jdbc.Driver");
                        //这里的3306/后跟的是数据库名
                        //获取数据库连接
                        String url="jdbc:mysql://localhost:3306/students?serverTimezone=GMT%2B8";
                        //通过DriverManager完成注册
                        con= DriverManager.getConnection(url,"root","123");//你自己的数据库用户名和密码
                        //执行SQL语句
                        String sql="select * from student";//from 后跟表名
                        st=con.createStatement();
                        rs=st.executeQuery(sql);
                boolean flag=false;
                while(rs.next()){
                    //如果输入的用户名和密码与数据库中的用户和对应的密码相同,则弹出“登录成功!”的窗口
                    if(f1.getText().equals(rs.getString(1))&&f2.getText().equals(rs.getString(2))){
                        JOptionPane.showMessageDialog(null, "登录成功!");
                        flag=true;//登陆成功后将标记改为true方便确认
                        break;
                    }
                }
                if(flag==false){//如果标记为false,则表示用户名和密码在数据库中未找到,弹出“登录失败!请注册账户!”的窗口
                    JOptionPane.showMessageDialog(null, "登录失败!请注册账户!");
                    f1.setText(null);//清空用户栏
                    f2.setText(null);//清空密码栏
                    //这个账号不存在,需要注册,跳转到注册窗口
                    guitext4 gt=new guitext4();
                    jf.dispose();//关闭窗体,释放所有资源
                }
                    } catch (ClassNotFoundException ex) {
                        ex.printStackTrace();
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
                }
            });
            jb1.setFont(font);
            jb2 = new JButton("退出");
            jb2.setBounds(150,100,80,40);
            //匿名内部类
            jb2.addMouseListener(new MouseAdapter() {
                //重写鼠标点击事件
                public void mouseClicked(MouseEvent e) {//如果点击了退出窗口,则弹出“退出成功!”的窗口
                    JOptionPane.showMessageDialog(null, "退出成功!");
                    //系统退出
                    System.exit(0);
                }
            });
            jb2.setFont(font);
            //将这些按钮和文本等加入到窗体中
            jf.add(l1);
            jf.add(f1);
            jf.add(l2);
            jf.add(f2);
            jf.add(jb1);
            jf.add(jb2);
            jf.add(time);
            jf.add(jc);
            jf.setVisible(true);//让组件显示
        }
    }
    //写一个时间线程类
    class time1 implements Runnable{
        JLabel time;//方便传参
        public time1(JLabel time) {
            this.time = time;
        }
        public void run(){
            while (true) {
                try {
                    Thread.sleep(1000);//休眠1秒
                    LocalTime time=LocalTime.now();//获取当前时间
                    this.time.setText(time.toString());//设置JLabel文本
                    //SimpleDateFormat t = new SimpleDateFormat ("HH:mm:ss");//格式化时间,把时间格式化为时:分:秒
                   // this.time.setText(t.format(time));//给标签添加内容,即时间
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

     注册页面:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    
    public class JDBC_注册功能 {
        public static void main(String[] args) {
            guitext4 gt=new guitext4();
        }
    }
    class guitext4{
        JFrame jf;
       // JPanel jp;
        JLabel l1,l2,l3;
        JTextField f1;
        JPasswordField f2,f3;
        JButton jb1,jb2;
        JRadioButton jr1,jr2;
        JCheckBox jc;
        public guitext4() {
            jf = new JFrame("QQ注册窗口");
            jf.setSize(320,280);//设置窗体大小
            jf.setLocation(700,300);//设置窗口每次启动都显示在屏幕正中央
            jf.setLayout(null);
           // jp = new JPanel();
            Font font = new Font("仿宋", Font.BOLD, 20);//设置统一的字体,让代码更加整洁美观
            l1 = new JLabel("用户名:");
            l1.setBounds(10,10,100,40);
            l1.setFont(font);
            f1 = new JTextField(null,20);
            f1.setBounds(90,15,180,30);
            f1.setFont(font);
                l2 = new JLabel("密  码:");
                l2.setBounds(8, 50, 100, 40);
                l2.setFont(font);
                f2 = new JPasswordField(null, 20);
                f2.setBounds(90, 55, 180, 30);
                f2.setEchoChar('*');//设置密码的外显为*
                f2.setFont(font);
                l3 = new JLabel("确认密码:");
                l3.setBounds(8, 88, 130, 40);
                l3.setFont(font);
                f3 = new JPasswordField(null, 20);
                f3.setBounds(120, 95, 160, 30);
                f3.setEchoChar('*');//设置密码的外显为*
            jc=new JCheckBox("显示密码");//创建一个复选按钮
            jc.setBounds(230,130,80,40);
            jc.addItemListener(new ItemListener() {
                public void itemStateChanged(ItemEvent e) {
                    if (e.getStateChange() == ItemEvent.SELECTED) {//被选中
                        f2.setEchoChar((char) 0);//显示原本的数据
                        f3.setEchoChar((char)0);//显示原本的数据
                    } else {
                        f2.setEchoChar('*');//设置密码的外显为*
                        f3.setEchoChar('*');//设置密码的外显为*
                    }
                }
            });
                    f3.setFont(font);
                    ButtonGroup group = new ButtonGroup();
                    //创建两个单选按钮
                    jr1 = new JRadioButton("男");
                    jr1.setBounds(70, 130, 80, 40);
                    jr1.setFont(font);
                    jr2 = new JRadioButton("女");
                    jr2.setBounds(150, 130, 80, 40);
                    jr2.setFont(font);
                    //将两个单选按钮加入到同一个ButtonGroup组中
                    group.add(jr1);
                    group.add(jr2);
                    //实现监听接口
                    ActionListener listener = new AbstractAction() {
                        @Override
                        //actionPerformed==>发生动作时调用
                        public void actionPerformed(ActionEvent e) {
    
                        }
                    };
                    jr1.addActionListener(listener);
                    jr2.addActionListener(listener);
                    jc.addActionListener(listener);
                    jb1 = new JButton("注册");
                    jb1.setBounds(50, 170, 80, 40);
                    //匿名内部类
                    jb1.addMouseListener(new MouseAdapter() {
                        public void mouseClicked(MouseEvent e) {
                            PreparedStatement ps = null;//PreparedStatement==>表示预编译的SQL语句的对象。
                            // SQL语句已预编译并存储在PreparedStatement对象中。
                            Connection con = null;//Connection==>与特定数据库的连接
                            try {
                                //注册驱动
                                Class.forName("com.mysql.cj.jdbc.Driver");
                                //这里的3306/后跟的是数据库名
                                //获取数据库连接
                                String url = "jdbc:mysql://localhost:3306/students?serverTimezone=GMT%2B8";
                                //通过DriverManager完成注册
                                con = DriverManager.getConnection(url, "root", "123");//你自己数据库的用户名和密码
                                //执行SQL语句
                                String sql = "insert into student(username,password,sex) values(?,?,?)";
                                ps = con.prepareStatement(sql);
                                if(f1.getText().length()!=0){
                                    //注:这里的所有getText()都不能写成!=null
                                    ps.setString(1, f1.getText());
                                }else{
                                    JOptionPane.showMessageDialog(null, "姓名不能为空!");//弹出窗口
                                }
                                if(f2.getText().length()!=0) {
                                    ps.setString(2, f2.getText());
                                }else{
                                    JOptionPane.showMessageDialog(null, "密码不能为空!");
                                }
                                if(jr1.isSelected()||jr2.isSelected()) {//如果选择男或者女,就存入数据库。
                                    if (jr1.isSelected()) {//isSelected()==>判断按钮有没有被选中
                                        ps.setString(3, jr1.getText());//选中男,则将sex=男添加到数据
                                    }
                                    if (jr2.isSelected()) {
                                        ps.setString(3, jr2.getText());//选中女,则将sex=女添加到数据
                                    }
                                }else{//否则弹出窗口提醒“请选择性别!”
                                    JOptionPane.showMessageDialog(null, "请选择性别!");
                                }
                            } catch (ClassNotFoundException ex) {
                                ex.printStackTrace();
                            } catch (SQLException ex) {
                                ex.printStackTrace();
                            }
                            if (new String(f2.getPassword()).equals(new String(f3.getPassword()))) {//如果密码与确认密码一致
                                if (new String(f2.getPassword()).equals(new String(f3.getPassword()))&&f1.getText().length()!=0&&f2.getText().length()!=0
                                        &&(jr1.isSelected()||jr2.isSelected())) {//如果密码与确认密码一致,用户名和密码不为空并且选择了性别,则注册成功
                                    JOptionPane.showMessageDialog(null, "注册成功!");
                                    //注册成功后跳转到登录窗口
                                    guitext3 gt = new guitext3();
                                    jf.dispose();//关闭窗体,释放所有资源
                                    try {
                                        int i = ps.executeUpdate();//将注册的账户存储到数据库中
                                    } catch (SQLException ex) {
                                        ex.printStackTrace();
                                    }
                                }
                            } else {
                                JOptionPane.showMessageDialog(null, "注册失败!密码与确认密码不一致!");
                                f2.setText(null);//清空密码
                                f3.setText(null);//清空确认密码
                            }
                        }
                    });
                    jb1.setFont(font);
                    jb2 = new JButton("退出");
                    jb2.setBounds(170, 170, 80, 40);
                    //匿名内部类
                    jb2.addMouseListener(new MouseAdapter() {
                        public void mouseClicked(MouseEvent e) {
                            JOptionPane.showMessageDialog(null, "退出成功!");
                            //系统退出
                            System.exit(0);
                        }
                    });
                    jb2.setFont(font);
                    jf.add(l1);
                    jf.add(f1);
                    jf.add(l2);
                    jf.add(f2);
                    jf.add(l3);
                    jf.add(f3);
                    jf.add(jr1);
                    jf.add(jr2);
                    jf.add(jc);
                    jf.add(jb1);
                    jf.add(jb2);
                    // jf.add(jp);
                    jf.setVisible(true);
                }
            }

     登录页面运行结果:

     faa4b668b0684aa190fbf4230d5b1c50.png

     注册页面运行结果:

     94c8fc0e52a8440e80ec729716f35e4e.png

     是否隐藏密码效果图:

    50fc842306794501a0c5ae40b6897663.png ee5aeb93f2b041babac9c4611ebb6871.png

     

    展开全文
  • java实现登录功能

    千次阅读 2020-11-21 17:49:58
    import java.util.Scanner; public class LoginTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); for(int i=3;i>0;i--){ System.out.println("请输入您的用户名和...
  • Java实现登录和注册功能

    千次阅读 多人点赞 2022-05-12 16:36:57
    我们要利用Java的图形化界面编程实现一个拥有注册和登录简单功能的案例 设计思路:首先我们要实现注册功能,就要有一个用来储存用户名和密码的对象,这里所采用的对象就是文件,通过IO流操作,将用户名和密码以字符...
  • java 连接数据库实现用户登录功能

    热门讨论 2012-12-08 19:24:27
    java 连接数据库实现用户登录功能 能运行成功,适合初学者借鉴学习。
  • Java实现登录功能(含修改密码 退出登录等)

    万次阅读 多人点赞 2021-07-07 14:15:58
    1.登录页面如图 2.业务准备 2.1.用户实体类 public class User { /** * 用户ID */ private Integer id; /** * 用户账号 */ private String userCode; /** * 用户名 */ private String userName; /** ...
  • Java Web实现简单的登录功能

    千次阅读 2021-12-20 22:28:25
    Java+jsp实现简单的用户登录功能,适合新手写登录功能
  • java短信验证码登录功能设计与实现

    万次阅读 多人点赞 2021-11-20 11:09:14
    前言 现在不管是各类的网站,还是大小社交app,登录方式是越来越多了,其中基于短信验证码的登录可以说是各类app必不可少的方式,短信验证码登录以其高效,安全,便捷等特性受到许多用户...倒计时功能,前后端如何配合
  • java实现模拟用户登录功能

    千次阅读 2021-11-24 22:29:13
    java实现模拟用户登录 功能描述 运用String类与Scanner类实现模拟用户登录基础功能,简单的登录验证模拟程序。 本案例要求编写一个程序,模拟用户登录,程序要求如下。 (1)用户名和密码正确,提示登录成功。 (2)用户名...
  • Java实现人脸登录、注册等功能【完整版】

    万次阅读 多人点赞 2022-05-11 21:54:06
    不再输入账号密码进行手动登录与注册,而是使用JQuery调用本机的摄像头进行拍摄照片,然后调用人脸识别接口将人脸信息自动注册进所使用的平台(百度云/Face++)后,用户即可进行人脸扫描实现登录操作。 项目搭建 1. ...
  • java订单功能实现

    千次阅读 2020-05-21 14:34:17
    java订单功能实现逻辑 在商城项目中,之前我们介绍了购物车功能模块的实现,商品加入到购物车之后,就是到购物车结算,然后显示购物车的商品列表,点击去结算,然后到了未提交前的订单列表,点击提交订单后,生成此...
  • java实现收藏功能

    千次阅读 多人点赞 2020-08-18 16:17:00
    java实现收藏功能 需求分析 分析: 1.要求用户必须登录,否则提示 2.第一次点击,表示收藏成功,收藏数+1,显示蓝色星星 3.第二次点击,表示取消收藏操作,收藏数-1,显示白色星星 ------------------------------------...
  • java实现发送短信验证码功能

    千次下载 热门讨论 2015-04-17 19:44:36
    使用的是信易通的短信平台接口,然后在Java中使用HttpClient模拟POST请求或者GET请求(看短信平台要求,一般的情况下都是POST请求),调用短信平台提供的接口(遵循短信平台的接口规范即可)发送短信验证码
  • java实现置顶功能

    千次阅读 2020-08-18 12:31:56
    1.为表添加排序字段,默认值0 2.语句 UPDATE t_ued_icon_package SET sequence = (SELECT se+ 1 FROM (SELECT MAX(sequence) ASse FROM t_ued_icon_package) IP) ...再使用orderb...
  • java连接MySql数据库 实现用户登录功能

    万次阅读 多人点赞 2018-02-13 14:03:19
    一: 准备工作 1.首先将MySql的jar包导入项目文件中,在进行连接。(Build path--&gt; Add) 2.写好配置文件(dbinfo.properties) 3...二:具体实现 1:登录界面 public class DengLu { public static v...
  • Java实现验证码验证功能

    万次阅读 多人点赞 2017-02-22 21:42:03
    Java如何实现验证码验证功能呢?日常生活中,验证码随处可见,他可以在一定程度上保护账号安全,那么他是怎么实现的呢? Java实现验证码验证功能其实非常简单:用到了一个Graphics类在画板上绘制字母,随机选取一定...
  • java实现简单的注册登录

    千次阅读 2022-03-14 17:57:21
    定义一个Login类实现注册登录,(控制台版,无界面) import javax.swing.*; import java.util.Scanner; public class Login extends JFrame { //声明用户名和密码 private String username; private String pwd...
  • java+mysql实现最基本的用户登录注册功能

    万次阅读 多人点赞 2018-08-02 18:29:34
    mysql驱动包:... java代码如下 import java.sql.*; import java.util.*; ...public class Login { ... * 用以实现用户的注册和登录 */ private static String...
  • java实现简单的登录界面】

    千次阅读 多人点赞 2022-01-26 14:27:24
    我们可以用java实现简单的登录界面。
  • java 查询功能实现的八种方式

    千次阅读 2019-05-09 14:37:26
    6. Java Persistence API = JPA 、JPQL 相关文章:JPA criteria 查询:类型安全与面向对象 @PersistenceContext private EntityManager em; ... String querySql = "SELECT xxx_id FROM xxxsibility WHERE dxxpxxxnt...
  • 使用JAVA实现邮件发送功能

    千次阅读 多人点赞 2022-04-07 17:01:23
    使用Java实现邮件发送(文本邮件,单个附件邮件,多个附件邮件)。
  • Java实现在线聊天功能

    千次阅读 多人点赞 2020-07-09 10:14:03
    创建Client.java import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; /** * @author Lete * @乐特的程序永无BUG * @createDate 2020- 07-04 22:13 * * 1. ...
  • Java Swing实现登陆功能

    千次阅读 2019-09-10 13:55:56
    Java Swing实现登陆功能使用swing实现用户登录功能构建用户登录界面程序入口 使用swing实现用户登录功能 构建用户登录界面 /** * @author FeianLing * @date 2019/9/9 */ @Data @Slf4j public class LoginV ...
  • java web实现简单留言板功能

    千次阅读 2021-02-12 16:31:18
    本文实例为大家分享了java web实现简单留言板的具体代码,供大家参考,具体内容如下一、目标用户可以登录并记住密码进入留言板,添加留言,点击留言列表中的标题可显示该条留言全部内容。二、相关知识1、使用Cookie...
  • Java实现排行榜功能

    千次阅读 2021-06-05 12:06:42
    最近项目需要开发一个排行榜功能,根据订单金额进行排名,同金额排名相同,不同则跳过,序列递增。 技术实现 MySQL 通过SQL语句也能实现,不过SQL过于复杂,也不好维护。 SELECT CASE WHEN @pre = final_score...
  • 【开发该软件的操作系统】:windows10 【软件开发环境/开发工具】:PyCharm 【编程语言】:Python 【开发目的】:这是老师布置的作业啦~...import java.util.Scanner; import com.cx.bank.manager.Managerlmpl; pu

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,135,394
精华内容 854,157
关键字:

java登录功能的实现