ADIL验证授权
来源:互联网 发布:北京市大兴区 阿里云 编辑:程序博客网 时间:2024/05/22 13:00
在项目中,我们编写了一个服务,通过AIDL对外提供接口,但是不是没一个调用者都可以调用我们的接口的,这时候,就需要对调用者的身份做授权验证了,验证方法有两种,第一种是权限验证(permission),第二种是包名验证(packageName)
一、权限验证:
在AIDL的响应方法中,添加以下代码,如果调用着没有声明这个权限,则直接返回null
private boolean verifyPermission() { int permission = checkCallingOrSelfPermission("com.showmac.aidlservice.ACCESS_PLUS_MY_SERVICE"); if (permission != PackageManager.PERMISSION_DENIED) { return true; } return false;}
ADIL服务中声明了以上权限后,需要调用者在mainfest中也做声明,才可以保证正常调用
<permission android:name="com.showmac.aidlservice.ACCESS_PLUS_MY_SERVICE" android:protectionLevel="normal" /><uses-permission android:name="com.showmac.aidlservice.ACCESS_PLUS_MY_SERVICE" />
二、包名验证:
在AIDL的响应方法中,添加以下代码,如果调用者的包名不符合,则直接返回null
private boolean verifyPackage(int uid) { String packageName = null; String[] packages = getPackageManager().getPackagesForUid(uid); if (packages != null && packages.length > 0) { packageName = packages[0]; } if (!"com.showmac.aidlclient".equals(packageName)) { return false; } return true;}
************************************************************************************************************************************************************************************
AIDL服务的完整代码如下:
package com.showmac.aidlservice;import android.app.Service;import android.content.Intent;import android.content.pm.PackageManager;import android.os.IBinder;import android.os.RemoteException;public class PlusMyService extends Service { @Override public IBinder onBind(Intent intent) { return mIIntPlusAidlInterface; } private final IIntPlusAidlInterface.Stub mIIntPlusAidlInterface = new IIntPlusAidlInterface.Stub() { @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { } @Override public int getPlus(int a, int b) throws RemoteException { if (!verifyPermission()) { return -1; } if (!verifyPackage(getCallingUid())) { return -1; } return a+b; } }; // 权限验证 private boolean verifyPermission() { int permission = checkCallingOrSelfPermission("com.showmac.aidlservice.ACCESS_PLUS_MY_SERVICE"); if (permission != PackageManager.PERMISSION_DENIED) { return true; } return false; } // 包名验证 private boolean verifyPackage(int uid) { String packageName = null; String[] packages = getPackageManager().getPackagesForUid(uid); if (packages != null && packages.length > 0) { packageName = packages[0]; } if (!"com.showmac.aidlclient".equals(packageName)) { return false; } return true; }}
阅读全文
0 0
- ADIL验证授权
- android ADIL
- Yii验证与授权
- Java验证和授权
- yii验证和授权
- shiro 验证授权
- 微信授权验证
- 验证用户登录授权
- 40. 验证和授权
- yii2 resetful 授权验证
- Shrio授权验证详解
- Android类-Service - ADIL
- Forms的角色验证授权
- IIS 用户验证及授权
- 优雅框架授权验证页面
- shiro 登录验证授权问题
- (七)、ZooKeeper 授权验证
- shiro 验证 授权配置实例
- MPU6050开发 -- 初识
- 【python 自然语言处理】画画词云图
- 二叉平衡树的插入和删除操作
- java作业杨枝11.18/11.19
- UE4蓝图节点翻译--- Get Component by Class
- ADIL验证授权
- nginx root、alias、location指令使用方法
- Linux卷操作的步骤
- TensorFLow 数学运算
- Oracle常见问题解决_ORA_28040
- leetcode解题方案--037-- Sudoku Solver
- Hadoop打Jar 及运行jar
- window.onload
- 浅谈MVC、MVP、MVVM架构模式的区别和联系