求一个本应用的要求输入用户名和密码!!!!!!

android 保存 用户名和密码 设置等应用信息优化 - Likwo - 博客园
1、传统的保存用户名,密码方式&SharedPreferences
Editor editor = shareReference.edit();
editor.putString(KEY_NAME,"username_value");
通过这样的方法,能够基本满足需求,比如有用户名,那么就Editor.putString存放就好。
但是这样的方法有一些弊端:
(1)在存放一些集合信息,存储ArrayList就不合适
(2)如果针对用户,新增加了很多熟悉,比如性别,头像等信息,那么需要一个一个的添加put和get方法,非常的繁琐。
2、通过序列化对象,将对象序列化成base64编码的文本,然后再通过SharedPreferences 保存,那么就方便很多,只需要在对象里增加get和set方法就好。
3、 序列换通用方法, 将list对象或者普通的对象序列化成字符串
package com.example.
import java.io.ByteArrayInputS
import java.io.ByteArrayOutputS
import java.io.IOE
import java.io.ObjectInputS
import java.io.ObjectOutputS
import java.io.StreamCorruptedE
import java.util.L
import android.util.Base64;
public class SerializableUtil {
public static &E& String list2String(List&E& list) throws IOException{
//实例化一个ByteArrayOutputStream对象,用来装载压缩后的字节文件
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//然后将得到的字符数据装载到ObjectOutputStream
ObjectOutputStream oos = new ObjectOutputStream(baos);
//writeObject 方法负责写入特定类的对象的状态,以便相应的readObject可以还原它
oos.writeObject(list);
//最后,用Base64.encode将字节文件转换成Base64编码,并以String形式保存
String listString = new String(Base64.encode(baos.toByteArray(),Base64.DEFAULT));
oos.close();
return listS
public static
String obj2Str(Object obj)throws IOException
if(obj == null) {
return "";
//实例化一个ByteArrayOutputStream对象,用来装载压缩后的字节文件
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//然后将得到的字符数据装载到ObjectOutputStream
ObjectOutputStream oos = new ObjectOutputStream(baos);
//writeObject 方法负责写入特定类的对象的状态,以便相应的readObject可以还原它
oos.writeObject(obj);
//最后,用Base64.encode将字节文件转换成Base64编码,并以String形式保存
String listString = new String(Base64.encode(baos.toByteArray(),Base64.DEFAULT));
oos.close();
return listS
//将序列化的数据还原成Object
public static Object str2Obj(String str) throws StreamCorruptedException,IOException{
byte[] mByte = Base64.decode(str.getBytes(),Base64.DEFAULT);
ByteArrayInputStream bais = new ByteArrayInputStream(mByte);
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public static &E& List&E& string2List(String str) throws StreamCorruptedException,IOException{
byte[] mByte = Base64.decode(str.getBytes(),Base64.DEFAULT);
ByteArrayInputStream bais = new ByteArrayInputStream(mByte);
ObjectInputStream ois = new ObjectInputStream(bais);
List&E& stringList =
stringList = (List&E&) ois.readObject();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return stringL
4、 要保存的用户对象
package com.example.
import java.io.S
import android.annotation.SuppressL
public class UserEntity implements Serializable
private static final long serialVersionUID = -8171030L;
private String userN
// 原始密码
public String getUserName()
return userN
public void setUserName(String userName)
this.userName = userN
public String getPassword()
public void setPassword(String password)
this.password =
5、编写SharedPreUtil ,实现对对象的读取和保存
package com.example.
import java.io.IOE
import java.io.StreamCorruptedE
import android.content.C
import android.content.I
import android.content.SharedP
import android.content.SharedPreferences.E
public class SharedPreUtil
// 用户名key
public final static String KEY_NAME = "KEY_NAME";
public final static String KEY_LEVEL = "KEY_LEVEL";
private static SharedPreUtil s_SharedPreU
private static UserEntity s_User =
private SharedP
// 初始化,一般在应用启动之后就要初始化
public static synchronized void initSharedPreference(Context context)
if (s_SharedPreUtil == null)
s_SharedPreUtil = new SharedPreUtil(context);
* 获取唯一的instance
public static synchronized SharedPreUtil getInstance()
return s_SharedPreU
public SharedPreUtil(Context context)
msp = context.getSharedPreferences("SharedPreUtil",
Context.MODE_PRIVATE | Context.MODE_APPEND);
public SharedPreferences getSharedPref()
public synchronized void putUser(UserEntity user)
Editor editor = msp.edit();
String str="";
str = SerializableUtil.obj2Str(user);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
editor.putString(KEY_NAME,str);
public synchronized UserEntity getUser()
if (s_User == null)
s_User = new UserEntity();
//获取序列化的数据
String str = msp.getString(SharedPreUtil.KEY_NAME, "");
Object obj = SerializableUtil.str2Obj(str);
if(obj != null){
s_User = (UserEntity)
} catch (StreamCorruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return s_U
public synchronized void DeleteUser()
Editor editor = msp.edit();
editor.putString(KEY_NAME,"");
6、 调用Activity代码
package com.example.
import android.app.A
import android.os.B
import android.text.TextU
import android.view.M
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.EditT
public class ActivityMain extends Activity
EditText edit_
EditText edit_
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreUtil.initSharedPreference(getApplicationContext());
edit_pwd = (EditText)findViewById(R.id.pwd);
edit_name = (EditText)findViewById(R.id.name);
button = (Button)findViewById(R.id.btn);
//保存到本地
button.setOnClickListener(new OnClickListener()
public void onClick(View v)
String name
= edit_name.getText().toString();
String pwd = edit_pwd.getText().toString();
UserEntity user = new UserEntity();
user.setPassword(pwd);
user.setUserName(name);
//用户名,密码保存在SharedPreferences
SharedPreUtil.getInstance().putUser(user);
Button delBtn = (Button)findViewById(R.id.btn_del);
delBtn.setOnClickListener(new OnClickListener()
public void onClick(View v)
SharedPreUtil.getInstance().DeleteUser();
edit_name.setText("");
edit_pwd.setText("");
UserEntity user = SharedPreUtil.getInstance().getUser();
if(!TextUtils.isEmpty(user.getPassword()) && !TextUtils.isEmpty( user.getUserName() ) ){
edit_name.setText(user.getUserName());
edit_pwd.setText(user.getPassword());
public boolean onCreateOptionsMenu(Menu menu)
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
& 对应的布局文件
&LinearLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".ActivityMain" &
android:id="@+id/name"
android:hint="please input
android:layout_width="fill_parent"
android:layout_height="40dip" /&
android:id="@+id/pwd"
android:layout_width="fill_parent"
android:hint="please input password"
android:layout_height="40dip" /&
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="40dip"
android:text="保存" &
android:id="@+id/btn_del"
android:layout_width="wrap_content"
android:layout_height="40dip"
android:text="清除" &
&/LinearLayout&
 来个截图
7、 如果我们的应用程序有不太复杂的保存需求,那么就可借助&SerializableUtil&list2String 将list对象保存为文本,然后在通过文本的方式来读取,这样就不用使用数据库了,会轻量很多。Module Zero之用户管理 - 推酷
Module Zero之用户管理
返回《Module Zero学习目录》
用户管理者
用户实体代表应用的一个用户,它派生自AbpUser类,如下所示:
public class User : AbpUser&Tenant, User&
//这里添加你自己的用户属性
这个类是你在安装module-zero时自动创建的。用户数据存储在数据库中的AbpUsers表。你可以添加User类的自定义属性(以及针对改变创建数据库迁移)。AbpUser类定义的基本属性如下:
:用户的登录名,对于一个租户来说应该是唯一的。
EmailAddress
:用户的邮箱地址。对于租户来说应该是唯一的。
:用户的哈希密码。
:如果用户可以登录到该应用,那么此值为true。
:用户的名和姓。
还有许多属性,如
Roles, Permissions, Tenant, Settings, IsEmailConfirmed
等等。你可以在AbpUser类中查看更多信息。
AbpUser类派生自
FullAuditedEntity
。这意味着它有创建,修改和删除的审计属性。它也支持软删除。因此当我们删除一个用户的时候,实际上它并没有从数据库中删除,而是仅仅标记为已删除的状态。
为了在一个多租户的应用中更好地工作,AbpUser类实现了
IMayHaveTenant
最后,User的Id定义为long类型。
用户管理者
用户管理者是执行用户领域逻辑的服务:
public class UserManager : AbpUserManager&Tenant, Role, User&
你可以注入用户管理者,然后使用它来创建,删除,更新用户,为用户授权,改变角色以及更多。你可以在这里添加你自己的方法。而且,你可以重写AbpUserManager基类的任何方法来满足你自己的需求。
如果你创建的不是一个多租户应用,那么你可以跳过本节。
曾经设计UserManager的目的是为单租户服务的。默认是为当前租户服务的。接下来看一下UserManager的一些用法:
public class MyTestAppService : ApplicationService
private readonly UserManager _userM
public MyTestAppService(UserManager userManager)
_userManager = userM
public void TestMethod_1()
//Find a user by email for current tenant
var user = _userManager.FindByEmail(&&);
public void TestMethod_2()
//Switch to tenant 42
CurrentUnitOfWork.SetFilterParameter(AbpDataFilters.MayHaveTenant, AbpDataFilters.Parameters.TenantId, 42);
//Find a user by email for the tenant 42
var user = _userManager.FindByEmail(&&);
public void TestMethod_3()
//Disabling MayHaveTenant filter, so we can reach to all users
using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.MayHaveTenant))
//Now, we can search for a user name in all tenants
var users = _userManager.Users.Where(u =& u.UserName == &sampleuser&).ToList();
//Or we can add TenantId filter if we want to search for a specific tenant
var user = _userManager.Users.FirstOrDefault(u =& u.TenantId == 42 && u.UserName == &sampleuser&);
UserManager有一个登录到该应用的
LoginAsync
方法。它检查所有的登录逻辑并返回一个登录结果。查看样例
中Login方法的示例用法。
关于IdentityResults
UserManager的一些方法返回了IdentityResult作为结果而不是抛出一些情况的异常。这是ASP.NET Identity Framework的本质。Module-zero也遵循这个。因此,我们可以查看这个返回的结果对象就可知道操作是否成功。
Module-zero定义了
CheckErrors
扩展方法,它可以自动地检查错误,如果需要,也会抛出异常(本地化的UserFriendlyException)。样例用法:
(await UserManager.CreateAsync(user)).CheckErrors();
为了获得一个本地化的异常,我们应该提供一个
ILocalizationManager
(await UserManager.CreateAsync(user)).CheckErrors(LocalizationManager);
Module-zero的Login方法会认证数据库的AbpUsers表中的用户。一些应用可能要求认证来自外部资源的用户(比如活动目录,来自其他数据库的表,甚至来自一个远程服务)。
对于很多情况,UserManager定义了一个名叫“外部认证资源”的扩展点。我们可以创建一个派生自
IExternalAuthenticationSource
的类,然后将它注册到配置中。有一个简化了IExternalAuthenticationSource的实现的类
DefaultExternalAuthenticationSource
,来看一个例子:
public class MyExternalAuthSource : DefaultExternalAuthenticationSource&Tenant, User&
public override string Name
get { return &MyCustomSource&; }
public override Task&bool& TryAuthenticateAsync(string userNameOrEmailAddress, string plainPassword, Tenant tenant)
//TODO: authenticate user and return true or false
在TryAuthenticateAsync方法中,我们可以检查来自某些资源的用户名和密码,如果给定的用户通过了该资源的认证,那么返回true。而且,我们可以重写CreateUser和UpdateUser方法来控制该资源的用户创建和更新。
当外部资源验证通过一个用户后,module-zero会检查数据库(AbpUser表)中是否存在该用户。如果不存在,就会调用CreateUser来创建该用户,否则调用UpdateUser使外部源更新已存在的用户信息。
在一个应用中,我们可以定义不止一个外部源。AbpUser实体有一个AuthenticationSource属性,它表明了哪个源认证了该用户。
为了注册认证源,我们可以在模块中的PreInitialize方法使用这些代码:
Configuration.Modules.Zero().UserManagement.ExternalAuthenticationSources.Add&MyExternalAuthSource&();
LDAP/活动目录
LdapAuthenticationSource是一个外部认证的实现,它可以让用户使用他们的LDAP(活动目录)用户名和密码登录。
如果我们想要使用LDAP认证,那么我们首先要将
添加到项目中(通常添加到Core(领域)项目)。然后,我们应该给应用扩展
LdapAuthenticationSource
,如下所示:
public class MyLdapAuthenticationSource : LdapAuthenticationSource&Tenant, User&
public MyLdapAuthenticationSource(ILdapSettings settings, IAbpZeroLdapModuleConfig ldapModuleConfig)
: base(settings, ldapModuleConfig)
最后,我们应该设置
AbpZeroLdapModule
的模块依赖,然后开启上面创建的LDAP认证源:
[DependsOn(typeof(AbpZeroLdapModule))]
public class MyApplicationCoreModule : AbpModule
public override void PreInitialize()
Configuration.Modules.ZeroLdap().Enable(typeof (MyLdapAuthenticationSource));
这些步骤之后,你的应用就开启了LDAP模块。但LDAP认证默认没有开启,我们可以使用设置来开启它。
LdapSettingNames类定义了一些设置名称的常量。当要改变设置(或者获取设置)时,你可以使用这些常量名称。LDAP设置是每个租户的(对于多租户应用)。因此,不同的租户有不同的设置。(在
上查看设置的定义)
正如你在MyLdapAuthenticationSource的构造函数中看到的,LdapAuthenticationSource期望
ILdapSettings
作为构造函数参数。该接口用于获得LDAP设置,如领域,用户名和密码,以连接到活动目录。默认的实现(
LdapSetting
类)从设置管理者中获得这些设置。
如果你使用了设置管理者,你可以使用设置管理者的API改变LDAP的设置。如果你想要的话,你可以通过将一个初始化/种子数据添加到数据库来默认开启LDAP认证。
注意:如果你没有定义领域,用户名和密码,且你的应用运行在具有合适权限的领域中,那么LDAP认证只对当前的领域有效。
自定义设置
如果你想定义其他的设置源,那么你可以实现一个自定义的ILdapSettings类,如下所示:
public class MyLdapSettings : ILdapSettings
public async Task&bool& GetIsEnabled(int? tenantId)
public async Task&ContextType& GetContextType(int? tenantId)
return ContextType.D
public async Task&string& GetContainer(int? tenantId)
public async Task&string& GetDomain(int? tenantId)
public async Task&string& GetUserName(int? tenantId)
public async Task&string& GetPassword(int? tenantId)
然后在模块中的PreInitialize方法里将它注册到IOC中:
[DependsOn(typeof(AbpZeroLdapModule))]
public class MyApplicationCoreModule : AbpModule
public override void PreInitialize()
IocManager.Register&ILdapSettings, MyLdapSettings&(); //change default setting source
Configuration.Modules.ZeroLdap().Enable(typeof (MyLdapAuthenticationSource));
这样,你就可以从其他资源获得LDAP设置了。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致& & 求一个验证用户名的正则表达式& & 各位大哥大姐,晚辈求一个验证用户名的正则表达式,苦苦思索了一个星期还是没有弄出来,本人愚钝,还望大家指教!& & VBscript编程要求用户名的字符控制在3至20个之间,由中文、大小写字母、数字、……
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
论文写作技巧
上一篇:下一篇:
相关经验教程

我要回帖

更多关于 http请求带用户名密码 的文章

 

随机推荐