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"/>

results matching ""

    No results matching ""