java申请读短信权限_创建一个Java应用程序,实现权限验证系统,要求提前把用户的信息存放到磁盘文件中,程序运行时,用户输入...

展开全部

界面:

import java.awt.Container;

import java.awt.Image;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JCheckBox;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

/**

* 仿QQ登录界面

*

* @author jiang

*/

public class GUIQQ extends JFrame {

// 用户名

private JTextField username;

// 密码

private JPasswordField password;

// 小容器

private JLabel jl1;

private JLabel jl2;

private JLabel jl3;

private JLabel jl4;

// 小按钮

private JButton bu1;

private JButton bu2;

private JButton bu3;

// 复选框

private JCheckBox jc1;

private JCheckBox jc2;

// 列表框

private JComboBox jcb;

/*

* 构造方法

*/

public GUIQQ() {

62616964757a686964616fe58685e5aeb931333332623334// 设置窗口标题

this.setTitle("QQ2012正式版");

// 窗体组件初始化

init();

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// 设置布局方式为绝对定位

this.setLayout(null);

this.setBounds(0, 0, 355, 265);

// 设置窗体的标题图标

Image image = new ImageIcon("e:/a.gif").getImage();

this.setIconImage(image);

// 窗体大小不能改变

this.setResizable(false);

// 居中显示

this.setLocationRelativeTo(null);

// 窗体可见

this.setVisible(true);

}

/*

* 初始化方法

*/

public void init() {

// 创建一个容器

Container con = this.getContentPane();

jl1 = new JLabel();

// 设置背景图片

Image image1 = new ImageIcon("e:/background.jpg").getImage();

jl1.setIcon(new ImageIcon(image1));

jl1.setBounds(0, 0, 355, 265);

// QQ登录头像设定

jl2 = new JLabel();

Image image2 = new ImageIcon("e:/a.gif").getImage();

jl2.setIcon(new ImageIcon(image2));

jl2.setBounds(40, 95, 50, 60);

// 用户号码登录输入框

username = new JTextField();

username.setBounds(100, 100, 150, 20);

// 用户号码登录输入框旁边的文字

jl3 = new JLabel("注册账号");

jl3.setBounds(260, 100, 70, 20);

// 密码输入框

password = new JPasswordField();

password.setBounds(100, 130, 150, 20);

// 密码输入框旁边的文字

jl4 = new JLabel("找回密码");

jl4.setBounds(260, 130, 70, 20);

// 输入框下方文字

jc1 = new JCheckBox("记住密码");

jc1.setBounds(105, 155, 80, 15);

jc2 = new JCheckBox("自动登录");

jc2.setBounds(185, 155, 80, 15);

// 用户登录状态选择

jcb = new JComboBox();

jcb.addItem("在线");

jcb.addItem("隐身");

jcb.addItem("离开");

jcb.setBounds(40, 150, 55, 20);

// 按钮设定

bu1 = new JButton("登录");

bu1.setBounds(280, 200, 65, 20);

// 给按钮添加1个事件

bu1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String str=e.getActionCommand();

if("登录".equals(str)){

String getName =username.getText();

//String getPwd =password.getText();

JOptionPane.showConfirmDialog(null, "您输入的用户名是"+getName);

}

}

});

bu2 = new JButton("多账号");

bu2.setBounds(5, 200, 75, 20);

bu3 = new JButton("设置");

bu3.setBounds(100, 200, 65, 20);

// 所有组件用容器装载

jl1.add(jl2);

jl1.add(jl3);

jl1.add(jl4);

jl1.add(jc1);

jl1.add(jc2);

jl1.add(jcb);

jl1.add(bu1);

jl1.add(bu2);

jl1.add(bu3);

con.add(jl1);

con.add(username);

con.add(password);

}

public static void main(String[] args) {

// 实例化对象

GUIQQ qq = new GUIQQ();

}

}

后台:

这是一个需要在下面用到的一个自定义运行时异常:

package com.pb.web.exectpion;

/**

* 专用于用户登陆检查的Exception

* @author Voishion

*/

public class DataAccessException extends RuntimeException{

private static final long serialVersionUID = 744741608422506769L;

public DataAccessException() {

super();

// TODO Auto-generated constructor stub

}

public DataAccessException(String message) {

super(message);

// TODO Auto-generated constructor stub

}

}

这是用户登陆的接口:UserDao,因为项目比较简单就省去了业务层的代码,有GenericDao,但是不用紧张,我们的登陆方法比较特殊,所以就没有在GenericDao上面定义:

package com.pb.web.dao;

import com.pb.blog.entity.User;

import com.pb.web.base.GenericDao;

public interface UserDao extends GenericDao{

/**

* 用户登录

* @param name

* @param pass

* @return

* @throws RuntimeException

*/

public User login(String name,String pass) throws RuntimeException;

}

这是我们UserDaoImpl的实现类,当我的用户名和密码正确的时候就返回给Contorl层一个User对象,当用户名或密码错误的时候,我将通过自定义异常DataAccessException来返回给用户错误信息

package com.pb.web.dao;

import java.sql.SQLException;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.springframework.orm.hibernate3.HibernateCallback;

import com.pb.blog.entity.User;

import com.pb.web.base.GenericDaoImpl;

import com.pb.web.exectpion.DataAccessException;

public class UserDaoImpl extends GenericDaoImpl implements UserDao{

@Override

public User login(String name, final String pass) throws RuntimeException{

final String hql="from User where username = '" + name +"'";

return (User) this.getHibernateTemplate().execute(new HibernateCallback() {

User user = null;

@Override

public Object doInHibernate(Session session) throws HibernateException,

SQLException {

user = (User) session.createQuery(hql).uniqueResult();

if(user == null){

//用户名不存在

throw new DataAccessException("用户名账号错误");

}else{

//用户存在,判断密码

if(!user.getPassword().equals(pass)){

throw new DataAccessException("用户密码错误");

}

}

return user;

}

});

}

}

接下来就是在Contort层来使用方法了,首先声明本人使用了Spring的事务管理以及IOC,还有就是Struts.xml的配置也省略了,SO You understand^^

package com.pb.web.action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

import com.pb.blog.entity.User;

import com.pb.web.service.UserService;

public class UserAction extends ActionSupport implements SessionAware{

private static final long serialVersionUID = -5053933981088584268L;

private String msg;

private User user;

private UserService service;

private Map session;

public String getMsg() {

return msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

public void setService(UserService service) {

this.service = service;

}

public void setSession(Map session) {

this.session = session;

}

/**

* 登陆用户

* @return

*/

public String login(){

try {

user = service.loginCheck(user);

if(user != null){

session.put("user", user);

msg = "true";

}

} catch (RuntimeException e) {

msg = e.getMessage();

}

return "LOGIN";

}

接下来在页面上使用Jquery来访问吧!-----

/**无刷新登陆及验证*/

function login(){

var name = $("#name").val();

var pass = $("#pass").val();

if((name != null && name !="") && (pass != null && pass !="")){

var params = {"user.username":name,"user.password":pass};

$.ajax({

url:"user!login.action",

type:"post",

data:params,

dataType:"json",

success:function(data){

if(data.msg == "true"){

$("#templatemo_logoutMsg").html("").append("Welcome,"+data.user.username+"!个人主页|退出");

$("#templatemo_logout").show();

$("#templatemo_login").hide();

}else{

$("#templatemo_loginMsg").html(data.msg);

}

},

error:function(){

$("#templatemo_loginMsg").html("网络连接异常");

}

});

}else{

$("#templatemo_loginMsg").html("用户名和密码不能为空");

}

}

所以这样一来,是不是用户就可以清楚的知道,到底是用户名错误还是密码错误了呢?????欢迎提出升级意见哦……………………TKS

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值