1.2emapAuth
1.2.1权限认证
1.2.1.1Java接口
1.2.1.1.1IAuthManager
1.2.1.1.1.1获取
com.wisedu.emap.auth.IAuthManager
获取方式:
private AppBeanContainer<IAuthManager> authMgr = new AppBeanContainer<IAuthManager>(
"emapAuth", IAuthManager.BEANID, false);
使用样例:
IAuthManager tmp = authMgr.get();
if (tmp != null) {
tmp.xxx();
1.1.1.1.1.2主要方法
1.根据角色编号获取角色对象
IRole getRole(String roleId)
2.获取所有角色对象
IRole[] getRoles()
3.更新角色的名称或者添加一个新的角色
boolean modifyRole(String roleId, String roleName)
4.根据用户编号获取用户信息
Map<String, Object> getUserInfo(String userId)
5.根据登录名及密码获取登录用户信息,如果不需要验证密码,密码可为空
Map<String, Object> getLoginInfo(String loginName, String password)
6.更新用户的信息或者添加一个新的用户
boolean modifyUserInfo(String userId, Map<String, Object> userInfo)
7.修改用户编号
boolean modifyUserId(String userId, String newId)
8.创建一个新的验证码
String newVerifyCode(String special)
如果需要创建特殊的验证码,可以通过special参数设置,如果只需要普通的验证码(4位的随机数字),special为null即可
9.获取当前的验证码
String currentVerifyCode()
1.2.1.1.2IRole
1.2.1.1.2.1定义
com.wisedu.emap.auth.IRole
通过IAuthManager获取
1.2.1.1.2.2主要方法
1.获取角色中包含的所有子角色的编号
Set<String> getSubRoles()
2.向角色中添加一个子角色,如果要添加多个可以用","分隔
void addSubRole(String subId)
3.从角色中删除一个子角色,如果要删除多个可以用","分隔
void deleteSubRole(String subId)
1.2.1.2应用扩展java接口
1.2.1.2.1IauthHelper
1.2.1.2.1.1使用
应用中如果需要自定义认证,则需要实现此接口,并把实现类的service名配置到emapAuth下的app.properties中auth.special.authHelper中
1.2.1.2.1.2主要方法
1、gotoLoginPage
跳转到登录页面
2、parsePassword
密码转换
3、Map<String, String>getLoginUserInfo
获取当前的登录信息,主要的自定义认证实现方法,登录失败返回空的Map,登录成功返回有值的Map
1.2.2权限配置
1.2.2.1概述
应用中,如果需要集中配置功能权限,可以在配置在下面这个文件中:
[应用目录]/config/permission.xml
[应用目录]即应用的工程目录
1.2.2.2配置样例
<permissions prefix="权限名称前缀,默认为{当前应用名称-},如果不需要前缀请设为空"
defaultLevel="默认的权限等级,默认值为需权限">
<permission name="权限id(同名的将合并)" cn="中文名称" menu="是否为菜单,默认为true">
<attribute name="n2" value="v2"/>
<attribute name="n2" value="v2"/>
<path value="路径" type="路径类型 normal global other" expr="是否为表达式">
<param name="n1" value="v1"/>
<param name="n2" value="v2"/>
</path>
<path value="/getStud.do"/>
<path value="/modules/page1/action1.do"/>
<path value="/modules/page2/*"/>
<path value="/sys/tmp.do" type="global"/>
<path value="/sys/emapcomponent/export.do" type="other"/>
<page name="epg的名称" actionR="排除其中的动作"/>
<permission name="sub" cn="子权限"></permission>
</permission>
<permission name="p1" cn="权限1">
<permission name="p2" cn="权限2">
</permission>
</permission>
<exclude>
<path value="路径" type="路径类型 同前" needLogin="是否需要登录" expr="是否为表达式"/>
</exclude>
<otherApp>
<attribute name="appFlag" value="指定应用的参数名称"/>
<!-- 这里维护需要由其他应用来判断权限的地址 -->
<path value="路径" expr="是否为表达式"/>
</otherApp>
</permissions>
1.2.2.3配置说明
根节点permissions中的prefix属性,对于需要匹配已有的权限编号的,需要将此值设置为空(如:prefix=""),否则会将应用名称作为前缀添加。
defaultLevel属性,默认值为2,表示需权限;如果要设为需登录,可改为1。
path节点中的type属性,此属性的默认值为normal。
如果设置为global表示全局地址,如获取字典表的地址:
<path value="/code/xxx.do" type="global"/>
如果设置为other表示访问其他应用的地址,如查询结果的导出功能:
<path value="/sys/emapcomponent/imexport/export.do" type="other"/>
otherApp节点用于配置哪些地址需要在其他应用中判断。
其中名称为appFlag的属性用于设置从哪个参数中获取应用名称,如果设置为“$Referer”,表示将根据请求头中的Referer获取应用名称。
没有配置任何path的permission节点将被忽略。
如果父节点被忽略的话,子节点也将被忽略。
样例1:
<permission name="a">
</permission>
权限a将被忽略,等同未定义
样例2:
<permission name="b">
<permission name="c">
<path .../>
</permission>
</permission>
权限b, c都将被忽略,等同未定义
参数中不支持表达式,如:
<path value="/a.do">
<param name="a" value="tmp*"/>
</path>
参数a的值“tmp*”不会被当作表达式,只能全等匹配这个值
如果一个固定地址包含在一个表达式地址中,则最终固定地址会取两个的合集。
样例1:
<permission name="a">
<path value="/a/b.do"/>
<permission>
<permission name="b">
<path value="/a/*"/>
<permission>
对于上面这样的配置,对/a/b.do的最终效果就是a,b权限都能访问。
样例2:
<permission name="a">
<path value="/a/b.do"/>
<permission>
<exclude>
<path value="/a/*" needLogin="false"/>
</exclude>
对于上面这样的配置,对/a/b.do的最终效果就是无需权限就能访问。
注:此规则对两个相同地址也适用。
样例3:
<permission name="a">
<path value="/a/b.do"/>
<permission>
<exclude>
<path value="/a/b.do" needLogin="false"/>
</exclude>
对于上面这样的配置,对/a/b.do的最终效果就是无需权限就能访问。
1.2.2.4表达式
表达式使用的是antpath,样例如下:
<path value="/a/**/type/*.do" expr="true"/>
但需要注意,简单的起始匹配不属于antpath,如:
<path value="/a/*"/>
如果需要以antpath匹配,那应该这样设置:
<path value="/a/*.do" expr="true"/>
另外,请注意,不符合antpath的路径,即使设置了expr="true",也不会将其作为表达式。
如下面这些,是不会被判断为表达式的。
<path value="/a/*" expr="true"/>
<path value="/a/b.do" expr="true"/>