本文实例讲述了Java使用JDBC实现Oracle用户认证的方法。分享给大家供大家参考,具体如下:

两天时间写的小品,以前的J2EE环境基本使用框架。现在使用JDBC配合Oracle存储过程模拟了一下用户注册和用户认证。
一、添加必须的jar包
需要JDBC连接Oracle的包和shiro-core依赖,添加shiro-core主要为了方便使用SHA-256散列算法。
二、编写JDBC连接
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Oracle {
private static final Logger logger = LoggerFactory.getLogger(Oracle.class);
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
logger.debug("尝试连接数据库");
String url = "jdbc:oracle:thin:@192.168.0.20:1541:test";
String username = "apps";
String password = "apps";
conn = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException cnfe) {
logger.error(cnfe.getMessage());
} catch (SQLException sqle) {
logger.error(sqle.getMessage());
}
return conn;
}
public static void closeConnection(Connection conn) {
try {
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException sqle) {
logger.error(sqle.getMessage());
}
}
}
三、建表
-- Create table create table LH_USER_T ( id INTEGER not null, username VARCHAR2(255), -- 用户名 password VARCHAR2(255), -- 密码 roleid INTEGER -- 外键链接 )
完整的用户添加和认证授权应该至少包含三张表:user_table、role_table和permission_table,本文不展开讨论。
四、添加用户
UserDao类负责数据库通信,密码散列由UserService类实现。
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UserDao {
private static final Logger logger = LoggerFactory.getLogger(UserDao.class);
// 添加用户
public void saveUser(int userid, String username, String password, int roleid) {
String sql = "insert into lh_user_t values (?,?,?,?)";
Connection conn = Oracle.getConnection();
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
ps.setInt(1, userid);
ps.setString(2, username);
ps.setString(3, password);
ps.setInt(4, roleid);
ps.executeUpdate();
} catch (SQLException sqle) {
logger.error(sqle.getMessage());
} finally {
Oracle.closeConnection(conn);
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
ps = null;
}
}
}
// 验证用户(后面添加)
}
UserService类
import org.apache.shiro.crypto.hash.Sha256Hash;
public class UserService {
private UserDao userDao;
private static int userid = 1;
public UserService() {
userDao = new UserDao();
}
public void saveUser(String username, String password, int roleid) {
String nPassword = new Sha256Hash(password).toHex();
userDao.saveUser(UserService.userid, username, nPassword, roleid);
}
//...
}
五、用户验证(Oracle存储过程)
create or replace procedure validate_user(in_username in varchar2, in_password in varchar2, out_result out varchar2) as tmp_uid lh_user_t.id%type; begin select count(*) into tmp_uid from lh_user_t t where t.username = in_username and t.password = in_password; out_result := 'S'; exception when NO_DATA_FOUND then out_result := 'E'; end;
六、用户验证(JDBC调用存储过程)
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UserDao {
private static final Logger logger = LoggerFactory.getLogger(UserDao.class);
// 添加用户
// {...}
// 验证用户
public String validateUser(String username, String password) {
String sql = "call validate_user(?,?,?)";
String result = null;
Connection conn = Oracle.getConnection();
CallableStatement cs = null;
try {
cs = conn.prepareCall(sql);
cs.setString(1, username);
cs.setString(2, password);
cs.registerOutParameter(3, Types.VARCHAR);
cs.execute();
result = cs.getString(3);
} catch (SQLException sqle) {
logger.error(sqle.getMessage());
} finally {
Oracle.closeConnection(conn);
if (cs != null) {
try {
cs.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
cs = null;
}
}
return result;
}
}
下面还需要在UserService类中添加散列算法
public class UserService {
private UserDao userDao;
private static int userid = 1;
public UserService() {
userDao = new UserDao();
}
// {...}
public String validateUser(String username, String password) {
String nPassword = new Sha256Hash(password).toHex();
return userDao.validateUser(username, nPassword);
}
}
七、总结
应用层根据service类返回的字符串判断用户是否认证成功,'E' 代表失败,'S' 代表成功。使用任何验证框架都需要从数据库中读取用户密码并在Java的框架中完成对比,个人更喜欢把这些工作交给数据库去完成,可以节省资源。
更多关于java相关内容感兴趣的读者可查看本站专题:《Java+MySQL数据库程序设计总结》、《Java数据结构与算法教程》、《Java文件与目录操作技巧汇总》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
# Java
# JDBC
# Oracle
# 用户认证
# Java开发Oracle数据库连接JDBC Thin Driver 的三种方法
# Java使用Jdbc连接Oracle执行简单查询操作示例
# Java使用JDBC或MyBatis框架向Oracle中插入XMLType数据
# Java使用JDBC连接Oracle_MSSQL实例代码
# Java与Oracle实现事务(JDBC事务)实例详解
# java使用jdbc链接Oracle示例类分享
# java基于JDBC连接Oracle 11g Release2实例分析
# Java如果通过jdbc操作连接oracle数据库
# JAVA使用JDBC连接oracle数据库的详细过程
# 存储过程
# 程序设计
# 操作技巧
# 相关内容
# 并在
# 要在
# 感兴趣
# 两天
# 数据结构
# 给大家
# 更多关于
# 还需
# 数据库中
# 所述
# 用户注册
# 三张
# 类中
# 应用层
# 连接数据库
# 讲述了
相关文章:
制作电商网页,电商供应链怎么做?
如何快速生成凡客建站的专业级图册?
如何高效利用亚马逊云主机搭建企业网站?
建站主机选哪家性价比最高?
如何高效配置香港服务器实现快速建站?
建站ABC备案流程中有哪些关键注意事项?
如何制作算命网站,怎么注册算命网站?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
广平建站公司哪家专业可靠?如何选择?
电商网站制作公司有哪些,1688网是什么意思?
Swift中swift中的switch 语句
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
北京网站制作公司哪家好一点,北京租房网站有哪些?
详解jQuery中基本的动画方法
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
C#怎么使用委托和事件 C# delegate与event编程方法
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
黑客如何通过漏洞一步步攻陷网站服务器?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
如何在Windows服务器上快速搭建网站?
如何在景安服务器上快速搭建个人网站?
如何用西部建站助手快速创建专业网站?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
存储型VPS适合搭建中小型网站吗?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
常州企业建站如何选择最佳模板?
广德云建站网站建设方案与建站流程优化指南
建站之星展会模版如何一键下载生成?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何彻底删除建站之星生成的Banner?
如何用搬瓦工VPS快速搭建个人网站?
如何通过VPS建站实现广告与增值服务盈利?
Python lxml的etree和ElementTree有什么区别
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
北京网站制作网页,网站升级改版需要多久?
如何在香港服务器上快速搭建免备案网站?
太原网站制作公司有哪些,网约车营运证查询官网?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
如何在橙子建站上传落地页?操作指南详解
网站制作大概多少钱一个,做一个平台网站大概多少钱?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
公司网站设计制作厂家,怎么创建自己的一个网站?
如何通过多用户协作模板快速搭建高效企业网站?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
三星网站视频制作教程下载,三星w23网页如何全屏?
建站之星2.7模板快速切换与批量管理功能操作指南
c++ stringstream用法详解_c++字符串与数字转换利器
建站为何优先选择香港服务器?
如何通过IIS搭建网站并配置访问权限?
*请认真填写需求信息,我们会在24小时内与您取得联系。