扩展用户

使用外部用户系统的配置


安装openfire,启动服务控制台,进入管理界面。首次进入管理,会自动进入配置界面,配置很简单。注意一点,在选择数据库时,使用“外部数据库”,openfire支持常用的数据库,包括mysql、oracle、mssql等。我使用的是mysql,这样openfire就会自动在指定的mysql数据库上建表,并写入初始数据。

openfire自带有一套用户系统,实现了用户登录验证功能,同时还允许通过配置,使用JDBC访问指定的数据库,这样就可以通过配置访问外部的用户系统了。最简单的方式是直接修改数据库进行配置。

1.在mysql客户端中打开openfire的数据库,打开表ofproperty,在里面添加4条记录:


















name propValue
jdbcProvider.driver com.mysql.jdbc.Driver
jdbcProvider.connectionString jdbc:mysql://[host]:3306/[database]?user=[user]&password=[pwd]
jdbcProvider.passwordSQL select password from auth_user where
username=?
jdbcProvider.passwordType md5

2.修改name为provider.auth.className的记录的propValue字段值为:org.jivesoftware.openfire.auth.JDBCAuthProvider

3.重启openfire控制台,如果你网站的密码字段采用的是标准MD5算法(另外也支持明文和SHA算法),那么现在就可以启动spark使用网站的帐号进行登录了。

4.在上表添加记录:

admin.authorizedJIDs —— [username]@[openfire-domain]

username是网站用户表内存在的一个用户名,openfire-domain是你的openfire的域。这样再需要登录管理界面时,使用这个用户名即可。

二、django用户系统的问题

是不是很简单?但如果你跟我一样,使用django开发网站,并且使用了django提供的用户系统。那么很遗憾,经过上面的步骤,你依然无法登录。原因就在于django的密码字段并不是单纯保存了密码,而是采用了和unix的shadow文件一样的格式,像下面这样:

sha1$3d5fd$8bf87829f5749c57f8336007c5fc6cbb9cfbb1f3

这个字段里包含了3个信息,即:本密码的算法、盐、密文,使用$进行分隔。上面这个JDBCAuthProvider使用的是常规的密码验证方法,即:

1.读取指定用户名的密码字段值; 
2.使用passwordType指定的算法加密用户输入的密码; 
3.比较本次加密的的字符串和读取出来的密码字段值是否相等。

由此可以看出,用指定算法加密的密码不可能和django的用户表中的密码字段值相等。

三、搞定它

问题找到了,是JDBCAuthProvider的密码验证算法不能满足要求,那么就从它开刀了。下载openfire的源码(猛击这里),用eclipse打开,设置方法请参见这里,很nice的一篇文章,清晰、翔实、可操作性强,我这个java门外汉照着步骤做都很快搞定了,只提醒初学者一点,不要把你的源码放在名字有中文的目录下——高手请无视:)。

openfire源码很赞,这里就不再多说了。在org.jivesoftware.openfire.auth这个包里可以找到JDBCAuthProvider这个类,验证密码的函数就是authenticate。

那么,我们修改它吧?呃,这样子似乎有点太暴力了,另外,如果将来官方在新版本里修改了这个类,就杯具了……

正确的做法:新建一个类,像JDBCAuthProvider一样实现AuthProvider接口的相关方法,这样子验证函数就随便你怎么折腾了,

扩展用户,布布扣,bubuko.com

时间: 2024-11-05 13:50:18

扩展用户的相关文章

django 利用钉钉 扩展用户系统

django 利用钉钉 扩展用户系统 用户架构图 说明 以django 自带 user,group 为基础 ,结合 钉钉用户系统 进行结合,以达到能够满足实际需求. 组关系: 钉钉部门组 通过 多对多 关系到 系统Group. 然后设置计划任务,如果 有钉钉部门组 关联到了 系统组,就把该用户组下的 用户 自动添加相应的 系统组. 组关系2: 自定义权限组 通过 多对多 关系到 系统Group. 根据 用户 系统组 的名字 查询到 自定义权限信息,进行判断 版本 Django==2.0.9 js

Django解决扩展用户表时,后台Admin显示密码为明文的问题

小生博客:http://xsboke.blog.51cto.com 如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论). -------谢谢您的参考,如有疑问,欢迎交流 Django解决当扩展用户表时,用户继承AbstractUser后,后台Admin会显示密码为明文的问题 先看项目列表 1.今天在写一个扩展Django默认的用户表功能时,遇到了一个问题.先给大家看一下我写的,扩展用户表的models[apps.users.models],我是通过继承Abstr

django扩展用户一对一关联

1.app01/models.py里面创建模型UserExtension, 一对一关联User from django.db import models from django.contrib.auth.models import User from django.dispatch import receiver from django.db.models.signals import post_save class UserExtension(models.Model): user = mod

扩展用户体验之操作栏ActionBar

一.什么是ActionBar 熟悉Android的人应该很清楚ActionBar指的是哪一部分,不熟悉的人并不清楚其的重要性,特别是Web app与Hybrid app开发者基本没有这一概念,当然在你们平时的开发中也用到了类似于ActionBar功能的布局部分,只是实现当时不同而已,一个使用Java实现,一个使用html来布局. 那到底什么是ActionBar呢?每个App的不同界面中都有一个相同的部分,这部分UI一般在一个App中是一致的,这部分就是导航栏,导航栏中一般有返回导航菜单,应用图标

转载django用户注册、登录、注销和用户扩展

1.用户登录: 首先假设有这样的登录界面: 处理登录的视图代码如下: def userLogin(request): curtime=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()); if request.method=='POST': print("POST") username=request.POST.get('name','') password=request.POST.get('password',

Python程序猿必知会的Django用户模块扩展方法

本文和大家分享的主要是Django用户模块的扩展相关知识,希望可以帮助大家更好的学习Django ,一起来看看吧. Django内置的用户验证系统十分强大.大多数情况下,它可以拿来就用,能帮我们省去很多开发.测试的工作.它能满足大多数的使用情况并且很安全.但是有时候,为满足我们的网络应用需求,需要对它进行一些微调. 一般来说,我们希望更多地存储与用户有关的数据.如果你的网络应用具有社交属性,你可能希望存储用户简介.地理位置以及其他相关的东西. 在此教程里,我将简单呈现扩展Django用户模型的方

18_django的用户模型和扩展django的用户模型

目录 User 模型 字段: User模型的基本用法 User 模型 User模型是这个框架的核心部分.他的完整的路径是在django.contrib.auth.models.User.以下对这个User模型做一个简单的了解: 字段: 内置的User模型拥有以下的字段: 1. username: 用户名.150个字符以内.可以包含数字和英文字符,以及_/@/+/.和-字符.不能为空,且必须唯一. 2. email: 邮箱. 可以为空. 3. password: 密码.经过哈希过后的密码. 4.

设计师如何用产品思维提升用户体验?

今天百度的同学来聊聊产品思维,让设计师从产品的角度入手,站在多维度考虑用户的问题.解决方法.产品目标和产品营销等,来看看不一样的思维能碰撞出哪样的火花. 当想起用户体验,我们经常会想到一款简洁.美观.易用产品的一系列功能,它让我们的生活更简单.但其实功能仅仅是产品微小.精细的一部分.针对用户遇到的问题,产品试图通过多种方法去解决,功能只是这众多可想出方法的一小部分.从产品的角度思考,意味着多维度统筹思考解决方案,包括特定用户的问题.待解决方案.产品目标.产品营收等维度. 用户体验的核心不是一系列

类别和类扩展

1.在iOS中,有一种机制可以使用户在没有源码的情况下扩展类的功能,但不是通过继承,这就是类别.iOS中没有类似C++中可以定义私有方法和私有变量的关键字,要定义私有方法和私有变量,可以用类扩展来实现.但类别不能添加类的属性和私有变量.类别可以用来扩展Cocoa中类的方法,也可以用来扩展用户自己的类中的方法.当我们查看系统头文件的时候能发现类似@interface NSMutableArray (NSExtendedMutableArray)的类定义,其实这就是类别的定义形式. 2.类 扩展,它