「java接口权限验证」如何给接口做权限验证

博主:adminadmin 2022-11-22 01:36:07 752

今天给各位分享java接口权限验证的知识,其中也会对如何给接口做权限验证进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JAVA 对外接口启用停用

1、首先系统会创建一个账号:密钥id,密钥secret,有效结束时间,状态(0:正常,1:停用),访问方法集合(空即可访问全部接口),签名sign则是通过一定的规则产生。

2、先设计一个通用接收字段。

3、签名加密算法定义。

4、账号授权,系统可以设置每个方法的权限,如果该账号没有被赋予接口访问权限,则不允许访问。

5、核验数据有效性,对每条数据都必须进行有效性核验。

6、接口访问数据记录,对每次接口访问的数据单独进行日志记录。

7、这样即可使JAVA对外接口启用停用。

「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接口权限验证和如何给接口做权限验证的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。