关于SharedUserId的总结:
我们知道一般每个app都有一个唯一的linux user
ID,则这样权限就被设置成该应用程序的文件只对该用户可见,只对该应用程序自身可见,而我们可以使他们对其他的应用程序可见,这会使我们用到
SharedUserId,也就是让两个apk使用相同的userID,这样它们就可以看到对方的文件。为了节省资源,具有相同ID的apk也可以在相同
的linux进程中进行(这儿需要注意,并不是一定要在一个进程里面运行),共享一个虚拟机。
我们可以建立两个application,分别为test_a和test_b,我们的目的就是让test_b访问test_a里面的文件或者是数据:具体做法如下
在test_a应用程序的包com.test1的manifest里面添加anroid:shareuserid=“com.test2”(注:这
儿test_a是被访的apk,so 加上这句
android:exported="false"说明它是私有的,然后会让shareuserid应用更有力)
具体内容如下:
-
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
-
<
manifest
xmlns:android
=
"http://schemas.android.com/apk/res/android"
-
package
=
"com.test1"
-
android:sharedUserId
=
"com.test2"
-
android:exported
=
"false"
-
android:versionCode
=
"1"
-
android:versionName
=
"1.0"
>
-
<
application
android:icon
=
"@drawable/icon"
android:label
=
"@string/app_name"
>
-
<
activity
android:name
=
".TestAcitvity1"
-
android:label
=
"@string/app_name"
>
-
<
intent-filter
>
-
<
action
android:name
=
"android.intent.action.MAIN"
/>
-
<
category
android:name
=
"android.intent.category.LAUNCHER"
/>
-
</
intent-filter
>
-
</
activity
>
-
</
application
>
-
-
-
</
manifest
>
然后再应用程序test_b的包com.test2下的manifest.xml中添加anroid:shareuserid=“com.test2”
然后在test_b的TestActivity2中添加如下代码:
-
private
Button.OnClickListener button_listener =
new
Button.OnClickListener() {
-
public
void
onClick(View v) {
-
Intent intent = new
Intent();
-
-
intent.setClassName("us.imnet.iceskysl.db"
,
"us.imnet.iceskysl.db.DBSharedPreferences"
);
-
-
-
-
startActivity(intent);
-
}
-
};
这样就可以调整跳转,然后就可以运行。完整代码是:
-
package
com.test2;
-
-
import
android.app.Activity;
-
import
android.content.Intent;
-
import
android.os.Bundle;
-
import
android.view.View;
-
import
android.widget.Button;
-
-
public
class
TestActivity2
extends
Activity {
-
-
@Override
-
public
void
onCreate(Bundle savedInstanceState) {
-
super
.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
find_and_modify_button();
-
}
-
private
void
find_and_modify_button(){
-
Button change_test1 = (Button) findViewById(R.id.change_test1);
-
change_test1.setOnClickListener(button_listener);
-
}
-
private
Button.OnClickListener button_listener =
new
Button.OnClickListener() {
-
public
void
onClick(View v) {
-
Intent intent = new
Intent();
-
-
intent.setClassName("us.imnet.iceskysl.db"
,
"us.imnet.iceskysl.db.DBSharedPreferences"
);
-
-
-
-
startActivity(intent);
-
}
-
};
-
}
运行结果是:从test_b的TestActivity1中进去,然后跳到TestActivity2中,这样可以读取到它里面的数据出来
文件访问:
可以通过getSharedPreferences(String, int)
,
openFileOutput(String, int)
或者
openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory)
创建一个新文件时,
你可以同时或分别使用
MODE_WORLD_READABLE
和
MODE_WORLD_WRITEABLE
标志允许其它包读
/
写此文件。
下面是用getSharedPreferences(String, int)
,创建到文件,修改它的属性为MODE_WORLD_WRITEABLE
则看到它的文件权限的变化:
(补充):关于linux下面文件权限
第2~10个字符当中的每3个为一组,左边三个字符表示所有者权限,中间3个字符表示与所有者同一组的用户的权限,右边3个字符是其他用户的权限。这三个一组共9个字符,代表的意义如下:
r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。
w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
-:表示不具有该项权限
分享到:
相关推荐
Explaining the Android security model and architecture, the book describes Android permissions, including Manifest permissions, to help readers analyze applications and understand permission ...
例如,`security_file_permission()`函数在用户尝试访问文件时被调用,以确定该访问是否被允许。每个钩子函数都提供了插入安全检查的机会。 二、Security-Enhanced Linux (SELinux) SELinux是LSM框架下的一个具体...
Spring Security 使用访问决策管理器(Access Decision Manager)和访问决策投票器(Access Decision Voter)来决定用户是否有权限访问资源。 4. **Roles and Permissions**: 在 Spring Security 中,角色(Role)...
在Java编程语言中,安全管理器(Security Manager)和权限(Permissions)是确保应用程序安全的关键组件。它们构成了Java安全模型的核心,防止恶意代码对系统资源进行未经授权的访问或操作。这篇博文将深入探讨这两...
- `java.security.Permission`类及其子类:如`FilePermission`、`SocketPermission`等,表示不同的权限类型。 - `java.security.Principal`接口:表示认证的实体,如用户或组。 - `java.security.cert.Certificate`...
3. **访问控制与安全性**:Java的安全模型基于类加载器和访问权限,防止恶意代码对敏感资源的访问。Java安全管理器(Security Manager)负责检查运行时的权限。 4. **Java Security Manager**:这是Java平台的一...
本书首先概述了计算机和网络安全概念并解释了Java安全模型,并在此基础上,详细描述了Java 2平台中新增加的许多安全结构方面的措施,同时对Java安全性的实施提出了使用指导,描绘了如何定制、扩展和精化安全结构以及...
Java Security API包含了一系列的接口和类,如`java.security.AccessController`用于执行权限检查,`java.security.Policy`定义安全策略,`java.security.Principal`代表认证的实体,以及`java.security.Permission`...
在Java中,安全性主要体现在三个方面:类加载器(Class Loaders)、访问控制(Access Control)和权限管理(Permissions)。下面我们将详细探讨这些关键知识点。 1. 类加载器: Java的类加载机制是其安全模型的...
这个特定的错误日志"org.apache.hadoop.security.AccessControlException: Permission denied: user=xudsa, access=WRITE, inode="/uploaddemo1.txt":hadoop:supergroup:-rw-r--r--"表明用户"xudsa"试图对文件"/...
在Java中,权限管理基于Java安全模型,该模型通过类加载器和安全策略来实现。下面将详细介绍Java权限控制的相关知识点。 1. **Java安全模型**: Java安全模型是Java平台的基础,它定义了如何限制代码的执行权限。...
Java的安全模型是基于类的,它通过权限(Permission)类来定义和控制对系统资源的访问。以下是一些相关的Java权限管理知识点: 1. **安全管理器(SecurityManager)**:Java中的安全管理器是实现安全策略的核心组件...
同时,`java.security.Permission`类用于表示具体的权限,比如`FilePermission`用于文件操作,`SocketPermission`用于网络连接。 授权策略是权限设计的核心,它决定了用户请求的资源访问是否被批准。Java提供了多种...
3.6.4 java.io.FilePermission 31 3.6.5 java.net.SocketPermission 33 3.6.6 java.security.BasicPermission 35 3.6.7 java.util.PropertyPermission 36 3.6.8 java.lang.RuntimePermission 37 3.6.9 java.awt....
It will help you more quickly climb the Android learning curve, so you can create the “killer app” you’ve dreamed of…or perhaps just a quick-and-dirty application for you and your friends. ...
2. **授权(Access Control)**:Spring Security 通过角色和权限的概念来实现细粒度的授权。它可以控制对特定资源或操作的访问,例如限制只有管理员才能访问某些URL。在"spring-security-sample"中,你将学习到如何...
此外,Java通过`java.security.Permission`类及其子类(如FilePermission、SocketPermission等)来定义和管理各种操作的权限。 在数据库设计的场景中,权限管理通常涉及到用户角色和权限分配。例如,我们可以创建...