「java接口权限验证」如何给接口做权限验证
今天给各位分享java接口权限验证的知识,其中也会对如何给接口做权限验证进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、JAVA 对外接口启用停用
- 2、Java接口访问权限
- 3、创建一个Java应用程序,实现权限验证系统,要求提前把用户的信息存放到磁盘文件中,程序运行时,用户输入
- 4、Java验证一个文件或目录是否有读写权限
- 5、java spring mvc通过httpclient调用别人的接口服务
JAVA 对外接口启用停用
1、首先系统会创建一个账号:密钥id,密钥secret,有效结束时间,状态(0:正常,1:停用),访问方法集合(空即可访问全部接口),签名sign则是通过一定的规则产生。
2、先设计一个通用接收字段。
3、签名加密算法定义。
4、账号授权,系统可以设置每个方法的权限,如果该账号没有被赋予接口访问权限,则不允许访问。
5、核验数据有效性,对每条数据都必须进行有效性核验。
6、接口访问数据记录,对每次接口访问的数据单独进行日志记录。
7、这样即可使JAVA对外接口启用停用。
Java接口访问权限
java规定是有一定的道理的,接口是一种为其他功能服务的,是一种定义,如果设置成private,那就不能被其他类使用了,那就失去其意义了。
创建一个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() {
// 设置窗口标题
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 GenericDaoUser, Integer{
/**
* 用户登录
* @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 GenericDaoImplUser, Integer 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 MapString, Object 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(MapString, Object 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+"!a href=\"#\"个人主页/a|a href=\"#\" onclick=\"logout();\"退出/a");
$("#templatemo_logout").show();
$("#templatemo_login").hide();
}else{
$("#templatemo_loginMsg").html(data.msg);
}
},
error:function(){
$("#templatemo_loginMsg").html("网络连接异常");
}
});
}else{
$("#templatemo_loginMsg").html("用户名和密码不能为空");
}
}
所以这样一来,是不是用户就可以清楚的知道,到底是用户名错误还是密码错误了呢?????欢迎提出升级意见哦……………………TKS
Java验证一个文件或目录是否有读写权限
您好,提问者:
/**
例如文件为G盘符下1.txt
*/
File file = new File("G:" + File.separator + "1.txt");
if(file.canWrite()) { //用来判断是否可以修改此文件
//可以修改(代表文件不为只读)
}
//下面file.setReadOnly(); 可以对文件设置为只读
java spring mvc通过httpclient调用别人的接口服务
主要有以下几点原因:
1、网络不通,在调用的机器上评一下对方服务器ip或域名;
2、如果接口url用的域名,排查是不是DNS问题,这种问题使用方法1时ping域名应该是不通的,直接ping ip可以通;
3、请求接口时设置的超时时间太短,httpclient可以设置超时时间,如果网络不稳定的话会导致请求通信还没有完成就达到超时时间;
4、接口url错误,这种理论上会报404,但是如果人家要求使用https,而你用的http协议,有可能导致超时;
5、对方接口肯定有权限验证,看是以什么方式鉴权,如果用的除token以外的方式鉴权,有可能会鉴权出错一直重试而导致超时;
6、代码错误,这种是你客户端有问题,尤其你提到使用了连接池,确保你从连接池获取的链接是可用的,链接使用完成后需要返还给池,记住是返还而不是关闭。使用连接池有一个缺点,就是对方接口如果不支持长连接的话,你使用连接池是没有效果的,可能一个连接使用一两次就连接不上了,需要重新创建链接。一般接口提供方都会提供demo,可以使用他们提供的demo尝试请求看通不通。
暂时想到可能性只有这么多,你也可以自己查询相关资料。
关于java接口权限验证和如何给接口做权限验证的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-22,除非注明,否则均为
原创文章,转载请注明出处。