当前位置:文档之家› 在 Web 项目中应用Shiro开源权限框架

在 Web 项目中应用Shiro开源权限框架

在 Web 项目中应用Shiro开源权限框架
在 Web 项目中应用Shiro开源权限框架

在Web 项目中应用Apache Shiro 开源权限框架

Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证、授权、加密、会话管理等功能。

认证和授权为权限控制的核心,简单来说,认证就是证明你是谁?Web 应用程序一般做法通过表单提交用户名...

Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证、授权、加密、会话管理等功能。认证和授权为权限控制的核心,简单来说,“认证”就是证明你是谁?Web 应用程序一般做法通过表单提交用户名及密码达到认证目的。“授权”即是否允许已认证用户访问受保护资源。关于Shiro 的一系列特征及优点,很多文章已有列举,这里不再逐一赘述,本文重点介绍Shiro 在Web Application 中如何实现验证码认证以及如何实现单点登录。

用户权限模型

在揭开Shiro 面纱之前,我们需要认知用户权限模型。本文所提到用户权限模型,指的是用来表达用户信息及用户权限信息的数据模型。即能证明“你是谁?”、“你能访问多少受保护资源?”。为实现一个较为灵活的用户权限数据模型,通常把用户信息单独用一个实体表示,用户权限信息用两个实体表示。

1. 用户信息用LoginAccount 表示,最简单的用户信息可能只包含用户名loginName 及密码

password 两个属性。实际应用中可能会包含用户是否被禁用,用户信息是否过期等信息。

2. 用户权限信息用Role 与Permission 表示,Role 与Permission 之间构成多对多关系。

Permission 可以理解为对一个资源的操作,Role 可以简单理解为Permission 的集合。

3. 用户信息与Role 之间构成多对多关系。表示同一个用户可以拥有多个Role,一个Role

可以被多个用户所拥有。

图1. 用户权限模型

认证与授权

Shiro 认证与授权处理过程

?被Shiro 保护的资源,才会经过认证与授权过程。使用Shiro 对URL 进行保护可以参见“与Spring 集成”章节。

?用户访问受Shiro 保护的URL;例如http://host/security/action.do。

?Shiro 首先检查用户是否已经通过认证,如果未通过认证检查,则跳转到登录页面,否则进行授权检查。认证过程需要通过Realm 来获取用户及密码信息,通常情况我们实现JDBC Realm,此时用户认证所需要的信息从数据库获取。如果使用了缓存,除第一次外用户信息从缓存获取。

?认证通过后接受Shiro 授权检查,授权检查同样需要通过Realm 获取用户权限信息。

Shiro 需要的用户权限信息包括Role 或Permission,可以是其中任何一种或同时两者,具体取决于受保护资源的配置。如果用户权限信息未包含Shiro 需要的Role 或

Permission,授权不通过。只有授权通过,才可以访问受保护URL 对应的资源,否则跳转到“未经授权页面”。

Shiro Realm

在Shiro 认证与授权处理过程中,提及到Realm。Realm 可以理解为读取用户信息、角色及权限的DAO。由于大多Web 应用程序使用了关系数据库,因此实现JDBC Realm 是常用的做法,后面会提到CAS Realm,另一个Realm 的实现。

清单1. 实现自己的JDBC Realm

01 public class MyShiroRealm extendsAuthorizingRealm{

02

03 // 用于获取用户信息及用户权限信息的业务接口

04 privateBusinessManager businessManager;

05

06 // 获取授权信息

07 protectedAuthorizationInfo doGetAuthorizationInfo(

08 PrincipalCollection principals) {

09 String username = (String) principals.fromRealm(

10 getName()).iterator().next();

11

12 if( username != null){

13 // 查询用户授权信息

14 Collection pers=businessManager.queryPermissions(username);

15 if( pers != null&& !pers.isEmpty() ){

16 SimpleAuthorizationInfo info = newSimpleAuthorizationInfo();

17 for( String each:pers )

18 info.addStringPermissions( each );

19

20 returninfo;

21 }

22 }

23

24 returnnull;

25 }

26

27 // 获取认证信息

28 protectedAuthenticationInfo doGetAuthenticationInfo(

29 AuthenticationToken authcToken ) throwsAuthenticationException {

30 UsernamePasswordToken token = (UsernamePasswordToken) authcToken;

31 // 通过表单接收的用户名

32 String username = token.getUsername();

33

34 if( username != null&& !"".equals(username) ){

35 LoginAccount account = businessManager.get( username );

36

37 if( account != null){

38 return newSimpleAuthenticationInfo(

39 account.getLoginName(),account.getPassword(),getName() );

40 }

41 }

42

43 returnnull;

44 }

45 }

代码说明:

1. businessManager 表示从数据库获取用户信息及用户权限信息的业务类,实际情况中可能

因用户权限模型设计不同或持久化框架选择不同,这里没给出示例代码。

2. doGetAuthenticationInfo 方法,取用户信息。对照用户权限模型来说,就是取LoginAccount

实体。最终我们需要为Shiro 提供AuthenticationInfo 对象。

3. doGetAuthorizationInfo 方法,获取用户权限信息。代码给出了获取用户Permission 的示

例,获取用户Role 的代码类似。为Shiro 提供的用户权限信息以AuthorizationInfo 对象形式返回。

为何对Shiro 情有独钟

或许有人要问,我一直在使用Spring,应用程序的安全组件早已选择了Spring Security,为什么还需要Shiro ?当然,不可否认Spring Security 也是一款优秀的安全控制组件。

本文的初衷不是让您必须选择Shiro 以及必须放弃Spring Security,秉承客观的态度,下面对两者略微比较:

1. 简单性,Shiro 在使用上较Spring Security 更简单,更容易理解。

2. 灵活性,Shiro 可运行在Web、EJB、IoC、Google App Engine 等任何应用环境,却不依

赖这些环境。而Spring Security 只能与Spring 一起集成使用。

3. 可插拔,Shiro 干净的API 和设计模式使它可以方便地与许多的其它框架和应用进行集成。

Shiro 可以与诸如Spring、Grails、Wicket、Tapestry、Mule、Apache Camel、Vaadin 这类第三方框架无缝集成。Spring Security 在这方面就显得有些捉衿见肘。

与Spring 集成

在Java Web Application 开发中,Spring 得到了广泛使用;与EJB 相比较,可以说Spring 是主流。Shiro 自身提供了与Spring 的良好支持,在应用程序中集成Spring 十分容易。

有了前面提到的用户权限数据模型,并且实现了自己的Realm,我们就可以开始集成Shiro 为应用程序服务了。

Shiro 的安装

Shiro 的安装非常简单,在Shiro 官网下载shiro-all-1.2.0.jar、shiro-cas-1.2.0.jar(单点登录需要),及SLF4J 官网下载Shiro 依赖的日志组件slf4j-api-1.6.1.jar。Spring 相关的JAR 包这里不作列举。这些JAR 包需要放置到Web 工程/WEB-INF/lib/ 目录。至此,剩下的就是配置了。

配置过滤器

首先,配置过滤器让请求资源经过Shiro 的过滤处理,这与其它过滤器的使用类似。

web.xml

01

02 shiroFilter

03

04 org.springframework.web.filter.DelegatingFilterProxy

05

06

07

08 shiroFilter

09 /*

10

Spring 配置

接下来仅仅配置一系列由Spring 容器管理的Bean,集成大功告成。各个Bean 的功能见代码说明。

01

02

03

04

05

06

07

08

09

10

11

12

13 /=anon

14 /login.do*=authc

15 /logout.do*=anon

16

17 # 权限配置示例

18 /security/account/view.do=authc,perms[SECURITY_ACCOUNT_VIEW]

19

20 /** = authc

21

22

23

24

25

26 class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

27

28

29

30

31

32

33

34

35

36

37 class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

38

39

40 class="org.apache.shiro.cache.ehcache.EhCacheManager">

41

42

43

44

45 class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter"/>

代码说明:

1. shiroFilter 中loginUrl 为登录页面地址,successUrl 为登录成功页面地址(如果首先访问

受保护URL 登录成功,则跳转到实际访问页面),unauthorizedUrl 认证未通过访问的页面(前面提到的“未经授权页面”)。

2. shiroFilter 中filters 属性,formAuthenticationFilter 配置为基于表单认证的过滤器。

3. shiroFilter 中filterChainDefinitions 属性,anon 表示匿名访问(不需要认证与授权),authc

表示需要认证,perms[SECURITY_ACCOUNT_VIEW] 表示用户需要提供值为

“SECURITY_ACCOUNT_VIEW”Permissio n 信息。由此可见,连接地址配置为authc 或perms[XXX] 表示为受保护资源。

4. securityManager 中realm 属性,配置为我们自己实现的Realm。关于Realm,参见前

面“Shiro Realm”章节。

5. myShiroRealm 为我们自己需要实现的Realm 类,为了减小数据库压力,添加了缓存机制。

6. shiroCacheManager 是Shiro 对缓存框架EhCache 的配置。

实现验证码认证

验证码是有效防止暴力破解的一种手段,常用做法是在服务端产生一串随机字符串与当前用户会话关联(我们通常说的放入Session),然后向终端用户展现一张经过“扰乱”的图片,只有当用户输入的内容与服务端产生的内容相同时才允许进行下一步操作。

产生验证码

作为演示,我们选择开源的验证码组件kaptcha。这样,我们只需要简单配置一个Servlet,页面通过IMG 标签就可以展现图形验证码。

01

02

03 kaptcha

04

05 com.google.code.kaptcha.servlet.KaptchaServlet

06

07

08

09 kaptcha

10 /images/kaptcha.jpg

11

扩展UsernamePasswordToken

Shiro 表单认证,页面提交的用户名密码等信息,用UsernamePasswordToken 类来接收,很容易想到,要接收页面验证码的输入,我们需要扩展此类:

01 public class CaptchaUsernamePasswordToken extendsUsernamePasswordToken{

02

03 privateString captcha;

04

05 // 省略getter 和setter 方法

06

07 publicCaptchaUsernamePasswordToken(String username, char[] password,

08 booleanrememberMe, String host,String captcha) {

09 super(username, password, rememberMe, host);

10 this.captcha = captcha;

11 }

12 }

扩展FormAuthenticationFilter

接下来我们扩展FormAuthenticationFilter 类,首先覆盖createToken 方法,以便获取CaptchaUsernamePasswordToken 实例;然后增加验证码校验方法doCaptchaValidate;最后覆盖Shiro 的认证方法executeLogin,在原表单认证逻辑处理之前进行验证码校验。

01 public class CaptchaFormAuthenticationFilter extendsFormAuthenticationFilter{

02

03 public static finalString DEFAULT_CAPTCHA_PARAM = "captcha";

04

05 privateString captchaParam = DEFAULT_CAPTCHA_PARAM;

06

07 publicString getCaptchaParam() {

08 returncaptchaParam;

09 }

10

11 public voidsetCaptchaParam(String captchaParam) {

12 this.captchaParam = captchaParam;

13 }

14

15 protectedString getCaptcha(ServletRequest request) {

16 returnWebUtils.getCleanParam(request, getCaptchaParam());

17 }

18

19 // 创建Token

20 protectedCaptchaUsernamePasswordToken createToken(

21 ServletRequest request, ServletResponse response) {

22

23 String username = getUsername(request);

24 String password = getPassword(request);

25 String captcha = getCaptcha(request);

26 booleanrememberMe = isRememberMe(request);

27 String host = getHost(request);

28

29 return newCaptchaUsernamePasswordToken(

30 username, password, rememberMe, host,captcha);

31 }

32

33 // 验证码校验

34 protected voiddoCaptchaValidate( HttpServletRequest request

35 ,CaptchaUsernamePasswordToken token ){

36

37 String captcha = (String)request.getSession().getAttribute(

38 com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);

39

40 if( captcha!=null&&

41 !captcha.equalsIgnoreCase(token.getCaptcha()) ){

42 throw newIncorrectCaptchaException ("验证码错误!");

43 }

44 }

45

46 // 认证

47 protected booleanexecuteLogin(ServletRequest request,

48 ServletResponse response) throwsException {

49 CaptchaUsernamePasswordToken token = createToken(request, response);

50

51 try{

52 doCaptchaValidate( (HttpServletRequest)request,token );

53

54 Subject subject = getSubject(request, response);

55 subject.login(token);

56

57 returnonLoginSuccess(token, subject, request, response);

58 } catch(AuthenticationException e) {

59 returnonLoginFailure(token, e, request, response);

60 }

61 }

62

63 }

代码说明:

1. 添加captchaParam 变量,为的是页面表单提交验证码的参数名可以进行灵活配置。

2. doCaptchaValidate 方法中,验证码校验使用了框架KAPTCHA 所提供的API。

添加IncorrectCaptchaException

前面验证码校验不通过,我们抛出一个异常IncorrectCaptchaException,此类继承

AuthenticationException,之所以需要扩展一个新的异常类,为的是在页面能更精准显示错误提示信息。

01 public class IncorrectCaptchaException extendsAuthenticationException{

02

03 publicIncorrectCaptchaException() {

04 super();

05 }

06

07 publicIncorrectCaptchaException(String message, Throwable cause) {

08 super(message, cause);

09 }

10

11 publicIncorrectCaptchaException(String message) {

12 super(message);

13 }

14

15 publicIncorrectCaptchaException(Throwable cause) {

16 super(cause);

17 }

18 }

页面展现验证码错误提示信息

01 Object obj=request.getAttribute(

02 org.apache.shiro.web.filter.authc.FormAuthenticationFilter

03 .DEFAULT_ERROR_KEY_ATTRIBUTE_NAME);

04 AuthenticationException authExp = (AuthenticationException)obj;

05 if( authExp != null)

{

06 String expMsg="";

07

08 if(authExp instanceofUnknownAccountException ||

09 authExp instanceofIncorrectCredentialsException){

10 expMsg="错误的用户账号或密码!";

11 }else if( authExp instanceofIncorrectCaptchaException){

12 expMsg="验证码错误!";

13 }else{

14 expMsg="登录异常:"+authExp.getMessage() ;

15 }

16

17 out.print("

"+expMsg+"
");

18 }

实现单点登录

前面章节,我们认识了Shiro 的认证与授权,并结合Spring 作了集成实现。现实中,有这样一个场景,我们拥有很多业务系统,按照前面的思路,如果访问每个业务系统,都要进行认证,这样是否有点难让人授受。有没有一种机制,让我们只认证一次,就可以任意访问目标系统呢?

上面的场景,就是我们常提到的单点登录SSO。Shiro 从1.2 版本开始对CAS 进行支持,CAS 就是单点登录的一种实现。

Shiro CAS 认证流程

?用户首次访问受保护的资源;例如http://casclient/security/view.do

?由于未通过认证,Shiro 首先把请求地址(http://casclient/security/view.do)缓存起来。

?然后跳转到CAS 服务器进行登录认证,在CAS 服务端认证完成后需要返回到请求的CAS 客户端,因此在请求时,必须在参数中添加返回地址( 在Shiro 中名为CAS

Service)。例如http://casserver/login?service=http://casclient/shiro-cas

?由CAS 服务器认证通过后,CAS 服务器为返回地址添加ticket。例如http://casclient/shiro-cas?ticket=ST-4-BWMEnXfpxfVD2jrkVaLl-cas

?接下来,Shiro 会校验ticket 是否有效。由于CAS 客户端不提供直接认证,所以Shiro 会向CAS 服务端发起ticket 校验检查,只有服务端返回成功时,Shiro 才认为认证通过。?认证通过,进入授权检查。Shiro 授权检查与前面提到的相同。

?最后授权检查通过,用户正常访问到http://casclient/security/view.do。

CAS Realm

Shiro 提供了一个名为CasRealm 的类,与前面提到的JDBC Realm 相似,该类同样包括认证和授权两部分功能。认证就是校验从CAS 服务端返回的ticket 是否有效;授权还是获取用户权限信息。

实现单点登录功能,需要扩展CasRealm 类。

01 public class MyCasRealm extendsCasRealm{

02

03 // 获取授权信息

04 protectedAuthorizationInfo doGetAuthorizationInfo(

05 PrincipalCollection principals) {

06 //... 与前面MyShiroRealm 相同

07 }

08

09 publicString getCasServerUrlPrefix() {

10 return"http://casserver/login";

11 }

12

13 publicString getCasService() {

14 return"http://casclient/shiro-cas";

15 }

16 }

代码说明:

1. doGetAuthorizationInfo 获取授权信息与前面章节“实现自己的JDBC Realm”相同。

2. 认证功能由Shiro 自身提供的CasRealm 实现。

3. getCasServerUrlPrefix 方法返回CAS 服务器地址,实际使用一般通过参数进行配置。

4. getCasService 方法返回CAS 客户端处理地址,实际使用一般通过参数进行配置。

5. 认证过程需keystore,否则会出现异常。可以通过设置系统属性的方式来指定,例如

System.setProperty("https://www.doczj.com/doc/8611733738.html,.ssl.trustStore","keystore-file");

CAS Spring 配置

实现单点登录的Spring 配置与前面类似,不同之处参见代码说明。

01

02 class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">

03

04

05 value="http://casserver/login?service=http://casclient/shiro-cas"/>

06

07

08

09

10

11

12

13

14

15

16 /shiro-cas*=cas

17 /logout.do*=anon

18 /casticketerror.do*=anon

19

20 # 权限配置示例

21 /security/account/view.do=authc,perms[SECURITY_ACCOUNT_VIEW]

22

23 /** = authc

24

25

26

27

28

29 class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

30

31

软件构架、架构和框架的区别

软件构架、架构和框架的区别 nizhigang2000的文章 软件框架(Software Framework)介绍 面向某领域(包括业务领域,如ERP,和计算领域,如GUI)的、可复用的“半成品”软件,它实现了该领域的共性部分,并提供一系列定义良好的可变点以保证灵活性和可扩展性。可以说,软件框架是领域分析结果的软件化,是领域内最终应用系统的模板。 随着软件规模的扩大、应用的广泛和软件复用技术的发展,以子程序或类(Class)为单位的软件复用有许多不足:(1)子程序库日趋其庞大以致于使用人员难以掌握,(2)大多数类粒度很小,且其自身往往不能完成有用的功能。这一问题迫使人们在复用中将一组类(或模块)及其交互作为一个整体来考虑,由此出现了软件框架。 软件框架至少包含以下组成部分: (1)一系列完成计算的模块,在此称为构件。 (2)构件之间的关系与交互机制。 (3)一系列可变点(也称热点,Hot-spots,或调整点)。 (4)可变点的行为调整机制。 开发人员通过软件框架的行为调整机制,将领域中具体应用所特有的软件模块绑定到该软件框架的可变点,从而得到最终应用系统,这一过程称为软件框架的例化(instantiation)。通过软件框架的使用,开发人员可将主要精力放在应用所特有的模块的开发上,从而大大提高了软件生产率和质量。 软件框架的行为调整机制是指如何针对具体的应用调整该框架的可变部分、如何在可变点加入特定应用模块所采用的方法和规则。行为调整机制可分为四种: (1)模板参数化。软件框架提供代码自动生成工具,该工具根据用户设置的参数自动生成所需的代码。 (2)继承和多态。通过面向对象中的子类继承和重载,在子类中加入新的功能或改变父类的行为。 (3)动态绑定。在运行时刻动态绑定所需的对象服务,可通过软件模式技术实现。 (4)构件替换。通过替换框架中可插拔的构件来加入业务特定的功能, 不同于一般的可复用软件制品,软件框架的一个显著特点是逆向控制(Inversion of Control),在复用过程中,前者需被显式调用,控制是在应用特定的模块中,软件框架则不然,应用开发人员只要将应用特定的模块绑定到框架内,框架则根据自己的交互机制自动调用该模块,控制由框架负责。 软件框架有很多种。按其应用的范围可分为: (1)系统基础设施框架。用于简化系统级软件的开发,如操作系统、用户界面、语言处理等,典型例子为MacApp, Microsoft’s MFC等。 (2)中间件集成框架。用于组装分布式应用和构件,典型例子为Microsoft’s DCOM, JavaSoft’s RMI, OMG’s CORBA等 (3)企业应用框架。用于各类应用领域,如电信、制造业、金融等。 按其表现形态可分为: (1)白盒框架。支持白盒复用,大型的类库或子程序库通常均提供白盒框架来协助复用。(2)黑盒框架。支持黑盒复用。中间件集成框架一般为黑盒框架。 构架和架构也就是通常所说的软件体系结构(software architecture).体系结构一般包括三个部分:构件,用于描述计算;连接器,用于描述构件的连接部分;配置,将构件和连接器组成一个有

总结Java部分的框架和开源项目

总结Java部分的框架和开源项目 Spring Framework【Java开源JEE框架】 Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。Spring提供了治理业务对象的一致方法同时鼓舞了注入对接口编程而不是对类编程的良好适应。Spring的架构基础是基于使用JavaBean属性的InversionofControl容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯独的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率同时减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他 O/Rmapping解决方案。Spring还提供了唯独的事务治理抽象,它能够在各种底层事务治理技术,例如JTA或者JDBC事务提供一个一致的编程模型。 Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务治理和其他企业事务--假如你需要--还能实现你自己的aspects。那个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring 还提供了能够和IoC容器集成的强大而灵活的MVCWeb框架。【SpringIDE:Eclipse平台下一个辅助开发插件】 WebWork【Java开源Web开发框架】 WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EEWeb框架。WebWork目前最新版本是2.1,现在的WebWork2.x前身是RickardOberg开发的WebWork,但现在WebWork差不多被拆分成了Xwork1和WebWork2两个项目。Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,同时完全从web层脱离出来。 Xwork提供了专门多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL–theObjectGraphNotationLanguage), IoC(InversionofControl倒置操纵)容器等。WebWork2建立在Xwork之上,处理的响应和要求。WebWork2使用ServletDispatcher将要求的变成Action(业务层Action类),session(会话)application(应用程序)范畴的映射,request要求参数映射。 WebWork2支持多视图表示,视图部分能够使用 JSP,Velocity,FreeMarker,JasperReports,XML等。在WebWork2.2中添加了对AJAX 的支持,这支持是构建在DWR与Dojo这两个框架的基础之上.【EclipseWork:用于WebWork辅助开发的一个Eclipse插件】 Struts【Java开源Web开发框架】

数据访问权限集的作用

定义 数据访问权限集是一个重要的、必须设定的系统配置文件选项。对具有相同科目表、日历和期间类型的分类帐及其所有平衡段值或管理段值的定义读写权限,系统管理员将其分配至不同的责任以控制不同的责任对分类帐数据的访问。 可以定义以下三种类型的数据访问权限集: ?全部分类帐:授予分类帐中所有数据的访问权限。例如,在具有两个分类帐(A和B)的数据访问权限集中,可以授予对分类帐A中所有数据的只读权限,对分类帐B中所有数据的读写权限。 ?平衡段值:授予对所有或特定分类帐/平衡段值(BSV)组合的访问权限。例如,可能使用包含分类帐A的数据访问权限集,授予对平衡段值01的只读权限,授予对平衡段值02的读写权限,对于相同分类帐中的平衡段值03没有任何权限。这对于使用少量包含有许多平衡段值来表示多个公司或法人主体的分类帐的公司非常有用。 ?管理段值:授予对所有或特定分类帐/管理段值(MSV)组合的访问权限。例如,可能使用包含分类帐A的数据访问权限集,授予对管理段值100的只读权限,授予对管理段值200的读写权限,对于相同分类帐中的管理段值300没有任何权限。只在当在科目表中指定了管理段时,才能使用管理段值。 注:1.“全部分类帐”访问权限集类型提供比“平衡段值”或“管理段值”访问权限集类型更好的系统性能。 2.在分配特定平衡段值/管理段值时,可以分别指定所有值、包括子值的父值或子值。 目的 通过定义分类帐、平衡段值、管理段值的读写权限,来控制不同的责任对分类帐数据的访问,同时控制用户对平衡段值和管理段值的读写。 前提条件: ?分类帐必须已分配给具有“完成”状态的会计科目设置。

?分配至数据访问权限集的分类帐(集)必须共用相同科目表、日历和期间类型。 ?需要进一步限制对分类帐、分类帐集或分类帐/分类帐集的特定平衡段值或管理段值的读写权限; 因为在创建分类帐(集)时,系统自动创建数据访问权限集。 创建使用的职责: 1.总帐超级用户—定义数据访问权限集 2.系统管理员—分配数据访问权限集 使用说明 1.必须为每个数据访问权限集指定三种类型之一。在定义之后,不能更改类型。只能添加或删除数据 访问权限集中指定的分类帐/分类帐集和段值。 2.在以下情况发生时,Oracle General Ledger会自动创建数据访问权限集: ?创建分类帐 ?定义分类帐集 2.1分类帐的系统生成数据访问权限集使用与分类帐相同的名称。此数据访问权限集使用“全部分类 帐”访问权限集类型,提供对分类帐的完全读写权限。 分类帐集的系统生成数据访问权限集使用与分类帐集相同的名称。此数据访问权限集使用“全 部分类帐”访问权限集类型,提供对分配给分类帐集的所有分类帐的完整读写权限。 2.2全部分类帐访问权限 需要具有全部分类帐访问权限才能执行某些操作,如打开和关闭期间、创建汇总帐户、创建明细帐户、创建预算以及执行成批维护。全部分类帐权限意味着具有分类帐及其所有平衡段值 或管理段值的完全读写权限。 要获得全部分类帐访问权限,的数据访问权限集必须为以下类型之一: ?“全部分类帐”数据访问权限集类型,提供对分类帐的读写权限。 ?“平衡段值”数据访问权限集类型,该类型为使用“所有值”复选框的分类帐提供对所有 平衡段值的读写权限。

五个开源软件解决方案

计算机世界/2006年/10月/9日/第B15版 开源软件?方案评析 《计算机世界》方案评析实验室推荐 五个开源软件解决方案 在此次征集的开源软件解决方案中,经过组织专家评选,《计算机世界》方案评析实验室推荐了5个开源软件解决方案。本报在此摘登其内容概要,有兴趣的读者可登录计世网(https://www.doczj.com/doc/8611733738.html,)查询方案全文。 开源软件解决方案 邮区中心局生产作业系统是全国邮政综合网非常重要的应用系统之一,红旗软件为其搭建了一个高效、稳定、安全的系统平台。 中科红旗 搭建邮区中心局作业系统 方案背景 邮区中心局生产作业系统是邮政综合网系统的一个重要组成部分,按照邮政生产的四大基本环节(收寄—处理—运输—投递)划分,邮区中心局主要负责邮件的处理和运输任务,它是一个邮区的邮件处理中心。 邮区中心局生产作业系统不仅要完成一个邮区中心局内邮政生产作业系统的计算机数字化、自动化和信息化的生产运作和管理,更要以此为基础构造一个全国性统一的邮政生产作业网络系统。因此该系统不只是在邮区中心局内的一个生产作业系统,更是作为全国邮区中心局间的邮件运输、交接、生产作业、业务查询、信息交换等系统的有机组成部分,承担着对局站间的物流和信息流处理的重要职责。 邮区中心局生产作业系统作为全国邮政综合网非常重要的应用系统之一,为更好地服务于目前及将来的业务需求,应尽量利用现有资源,该系统的设计、开发、实施、运行应遵循实用性、开放性、综合性、统一性以及安全性等原则。 部署实施过程 在中心机房采用了Red Flag DC Server作为操作系统,采用Red Flag HA Server对数据库及应用做系统热备份; 在生产车间采用Red Flag DC Server作操作系统。 ●生产中心 生产中心是邮区中心局生产作业系统的数据中心,在此设置枢纽服务器,存储管理邮区中心局生产作业系统的生产数据,同时还是邮区中心局内和综合网其他系统的数据交换枢纽。生产中心服务器系统分为数据库服务器和应用服务器两部分。 数据库服务器 数据库服务器是整个业务系统的核心,采用 Oracle作为数据库管理平台,数据库服务分为生产数据库和历史数据库两个实例,为了保证其7x24小时不间断地提供服务,采用两台IBM xSeries 255运行Red Flag DC Server操作系统,通过红旗高可用(HA)集群软件组成高可用系统。 应用服务器和Web服务器 邮区中心局生产作业系统的应用服务器采用Tuxedo作为中间件平台的生产作业应用系统,而对于历史数据系统采用的是在Weblogic系统上的B/S模式的数据管理及查询系统,应用服务器及Web服务器系统同样要确保其7x24小时不间断提供服务,这就要求系统同样具有极高的可靠

GitHub上最受欢迎的57个深度学习开源项目

GitHub上最受欢迎的57个深度学习开源项目TensorFlow 作为谷歌的第二代机器学习系统,TensorFlow在过去的一年里成为了github上当之无愧的最受欢迎项目。按照谷歌所说,在某些基准测试中,TensorFlow 的表现比第一代的DistBelief 快了2倍。TensorFlow 内建深度学习的扩展支持,任何能够用计算流图形来表达的计算,都可以使用TensorFlow。任何基于梯度的机器学习算法都能够受益于TensorFlow 的自动分化(auto-differentiation)。通过灵活的Python 接口,要在TensorFlow 中表达想法也会很容易。Caffe Caffe是一个高效的开源深度学习框架。由表达式,速度和模块化组成。Caffe给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。Caffe能够运行很棒的模型和海量的数据,可以使用Caffe提供的各层类型来定义自己的模型。Neural style Torch实现的神经网络算法。Neural style 是让机器模仿已有画作的绘画风格来把一张图片重新绘制的算法。deepdream Deep Dream是一款图像识别工具。一个原本用来将图片分类的AI,让我们看到不一样的世界~在把一张图片喂入之后,

选择某一层神经网路(Google 的神经网路有10-30 层)进行重复处理的次数和变形的程度,就能获得一张非常后现代的「画作」。Keras 一款Python实现的深度学习库,包括卷积神经网络、递归神经网络等。运行在Theano和TensorFlow之上。Keras是一个极简的、高度模块化的神经网络库,采用Python(Python 2.7-3.5.)开发,能够运行在TensorFlow和Theano任一平台,好项目旨在完成深度学习的快速开发。RocAlphaGo 学生主导的一个独立项目,从新实现了DeepMind在2016 Nature发表的内容,《用深度神经网络和树搜索学习围棋》(Nature 529, 484-489, 28 Jan 2016)。 TensorFlow Models 基于TensorFlow开发的模型。这个库包含了各种机器学习模型在TensorFlow实践。 Neural Doodle 运用深度神经网络将涂鸦变为优雅的艺术品,从照片生成无缝纹理,转变图片风格,进行基于实例的提升,等等…还有更多!(语义风格传递的实现)CNTK 深度学习工具包。来自微软公司的CNTK工具包的效率,“比我们所见过的都要疯狂”。这部分归功于CNTK可借助图形处理单元(GPU)的能力,微软自称是唯一公开“可扩展GPU”功能的公司。(从单机上的1个、延伸至超算上的多个)在

11 BO数据权限控制

1、在数据库新建权限控制表,记录登录人员及其拥有的权限,下面的例子是基于MS SQL Server 2005和BO R2: CREATE TABLE SIS_CTL_User( name varchar(50),--登录人员ID user_desc varchar(50),--登录人员描述,可为空 Region varchar(20),--有数据权限的区域 country varchar(10),--有数据权限的国家 Sub_Region varchar(10),--有数据权限的小区 City varchar(20),--有数据权限的城市 brand varchar(20),--有数据权限的品牌 Sub_Brand varchar(20)----有数据权限的子品牌 ) 对于地区和产品2个权限,如果记录Sub_Region的数据权限,则Region可以不填,其余类似,即只需要将拥有权限的那层填充即可,上级、下级不需要填。 模拟测试数据: 用户test1拥有Region EOC的权限,用户test2拥有Sub_Region WOC1、WOC2的权限:insert into SIS_Ctl_User(name,region) values('test1','EOC'); insert into SIS_Ctl_User(name,sub_region) values('test2','WOC1'); insert into SIS_Ctl_User(name,sub_region) values('test2','WOC2'); 2、在BO控制台将test1加入组Region,test2加入组Sub_Region(目的是将权限控制应用在组上,如果是对单个用户应用权限控制,则不需要加入组) 3、在Universe配置权限控制: 新建2个限制,一个是限制大区的权限,一个限制小区的权限: 新建访问限制,在新开的窗口输入限制名称“大区权限”,在下面的部分选择“行”,

开源项目之Android Afinal框架

项目如图: 本文参考网络! Afinal是一个开源的android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少。在android应用开发中,通过Afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定。通过Afinal的orm框架,无需任何配置信息,一行代码就可以对android 的sqlite数据库进行增删改查操作。同时,Afinal内嵌了finalHttp等简单易用的工具,可以轻松的对http就行求情的操作。Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。 Afinal框架的各个模块带来了的便捷 1、FinalDB模块:android中的orm框架,一行代码就可以进行增删改查。支持一对多,多对一等查询。 2、FinalActivity模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。 3、FinalHttp模块:通过httpclient进行封装http数据请求,支持ajax方式加载。 4、FinalBitmap模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap 加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。FinalBitmap 可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存

管理使用lru算法,没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),更好的管理bitmap内存。FinalBitmap可以自定义下载器,用来扩展其他协议显示网络图片,比如ftp 等。同时可以自定义bitmap显示器,在imageview显示图片的时候播放动画等(默认是渐变动画显示)。 将Afinal框架带进你的工程的过程 1.下载Afinal的jar包。推荐到GIT上下载(https://https://www.doczj.com/doc/8611733738.html,/yangfuhai/afinal),这里不仅提供了Afinal 的jar包,还包括Afinal的源码以及详细API。 2.将下载后的jar包添加到Android工程里面。相信大家都会,不过也可能会遇到当添加了Afinal包后,继承FinalActivity的Activity会报https://www.doczj.com/doc/8611733738.html,ng.classNotFound这种错误,这种情况你最好将Afinal 包直接拷贝到Android工程的lib文件夹里面。这时你看Android的Dependencies包里面如果有了Afinal包就再次运行APK应该就不会有错了。 3.一个依赖Afinal包的工程还需要添加它所需要的权限:我们在AndroidManifest.xml文件里面添加如下权限: [java]view plaincopy 1. [java]view plaincopy 1. Afinal框架的各个模块的具体使用 FinalDB使用方法: [java]view plaincopy 1.FinalDb db = FinalDb.create(this); 2. https://www.doczj.com/doc/8611733738.html,er user = new User(); 4.

java开源框架题目

一、选择题(每题2分,共24 分) 1.不属于Action 接口中定义的字符串常量的是__B _________ 。 A .SUCCESS B .FAILURE C.ERROR D .INPUT 2.在控制器类中一般需要添加相应属性的 ____ A _______ 和____ C ______ A .setter 方法 B .as 方法 C .getter 方法D.is 方法 3.控制器需要在___ B__ ____ 配置文件中进行配置。 A .web.xml B .struts.xml C.struts2.xml D.webwork.xml 4.资源文件的后缀名为_ __D ________ 。 A .txt B.doc C.property D .Properties 5. 事务隔离级别是由谁实现的?(C) A. Java 应用程序 B. Hibernate C. 数据库系统 D. JDBC 驱动程序 6.struts 中数据验证失败时,通过( B )标签显示错误信息。 A. B. C. D. 7. 有这样一个表单元素,想要找到这个hidden 元素,下面哪个是正确的?(B) A. visible C. visible() 8 下面哪一个是用来追加到指定元素的末尾的? A. insertAfter() C. appendTo() 9. 不属于Struts2 的动作类的常量返回值的是 ( A .success B .input C .never D .login B. hidden D. hidden() (C) B. append() D. after() C)

网络层访问权限控制技术ACL详解

网络层访问权限控制技术ACL详解 技术从来都是一把双刃剑,网络应用与互联网的普及在大幅提高企业的生产经营效率的同时,也带来了诸如数据的安全性,员工利用互联网做与工作不相干事等负面影响。如何将一个网络有效的管理起来,尽可能的降低网络所带来的负面影响就成了摆在网络管理员面前的一个重要课题。 A公司的某位可怜的网管目前就面临了一堆这样的问题。A公司建设了一个企业网,并通过一台路由器接入到互联网。在网络核心使用一台基于IOS的多层交换机,所有的二层交换机也为可管理的基于IOS 的交换机,在公司内部使用了VLAN技术,按照功能的不同分为了6个VLAN。分别是网络设备与网管(VLAN1,10.1.1.0/24)、内部服务器(VLAN2)、Internet连接(VLAN3)、财务部(VLAN4)、市场部(VLAN5)、研发部门(VLAN6),出口路由器上Fa0/0接公司内部网,通过s0/0连接到Internet。每个网段的三层设备(也就是客户机上的缺省网关)地址都从高位向下分配,所有的其它节点地址均从低位向上分配。 自从网络建成后麻烦就一直没断过,一会儿有人试图登录网络设备要捣乱;一会儿领导又在抱怨说互联网开通后,员工成天就知道泡网;一会儿财务的人又说研发部门的员工看了不该看的数据。这些抱怨都找这位可怜的网管,搞得他头都大了。那有什么办法能够解决这些问题呢?答案就是使用网络层的访问限制控制技术――访问控制列表(下文简称ACL)。 那么,什么是ACL呢?ACL是种什么样的技术,它能做什么,又存在一些什么样的局限性呢? ACL的基本原理、功能与局限性 网络中常说的ACL是Cisco IOS所提供的一种访问控制技术,初期仅在路由器上支持,近些年来已经扩展到三层交换机,部分最新的二层交换机如2950之类也开始提供ACL的支持。只不过支持的特性不是那么完善而已。在其它厂商的路由器或多层交换机上也提供类似的技术,不过名称和配置方式都可能有细微的差别。本文所有的配置实例均基于Cisco IOS的ACL进行编写。 基本原理:ACL使用包过滤技术,在路由器上读取第三层及第四层包头中的信息如源地址、目的地址、源端口、目的端口等,根据预先定义好的规则对包进行过滤,从而达到访问控制的目的。 功能:网络中的节点资源节点和用户节点两大类,其中资源节点提供服务或数据,用户节点访问资源节点所提供的服务与数据。ACL的主要功能就是一方面保护资源节点,阻止非法用户对资源节点的访问,另一方面限制特定的用户节点所能具备的访问权限。 配置ACL的基本原则:在实施ACL的过程中,应当遵循如下两个基本原则: 最小特权原则:只给受控对象完成任务所必须的最小的权限 最靠近受控对象原则:所有的网络层访问权限控制 局限性:由于ACL是使用包过滤技术来实现的,过滤的依据又仅仅只是第三层和第四层包头中的部分信息,这种技术具有一些固有的局限性,如无法识别到具体的人,无法识别到应用内部的权限级别等。因此,要达到end to end的权限控制目的,需要和系统级及应用级的访问权限控制结合使用。 ACL配置技术详解 “说那么多废话做什么,赶快开始进行配置吧。”,A公司的网管说。呵呵,并不是我想说那么多废话,因为理解这些基础的概念与简单的原理对后续的配置和排错都是相当有用的。说说看,你的第一个需求是什么。 “做为一个网管,我不期望普通用户能telnet到网络设备”――ACL基础 “补充一点,要求能够从我现在的机器(研发VLAN的10.1.6.66)上telnet到网络设备上去。”。hamm,是个不错的主意,谁都不希望有人在自己的花园中撤野。让我们分析一下,在A公司的网络中,除出口路由器外,其它所有的网络设备段的是放在Vlan1中,那个我只需要在到VLAN 1的路由器接口上配置只允许源地址为10.1.6.66的包通过,其它的包通通过滤掉。这中只管源IP地址的ACL就叫做标准IP ACL: 我们在SWA上进行如下的配置:

总结Java部分的框架和开源项目

文章分类: 下面我将为大家总结一下Java部分的框架和开源项目,让您从总的方面对Java部分框架有一定的了解。 Spring Framework【Java开源JEE框架】 Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的InversionofControl 容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/Rmapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。 Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVCWeb框架。【SpringIDE:Eclipse 平台下一个辅助开发插件】 WebWork【Java开源Web开发框架】 WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EEWeb框架。WebWork目前最新版本是,现在的前身是RickardOberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。 Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL–theObjectGraphNotationLanguage),IoC(InversionofControl倒置控制)容器等。WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类),session(会话)application(应用程序)范围的映射,request请求参数映射。 WebWork2支持多视图表示,视图部分可以使用JSP,Velocity,FreeMarker,JasperReports,XML等。在中添加了对AJAX的支持,这支持是构建在DWR与Dojo这两个框架的基础之上.【EclipseWork:用于WebWork 辅助开发的一个Eclipse插件】 Struts【Java开源Web开发框架】 Struts是一个基于SunJ2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签?和信息资源(messageresources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。【StrutsIDE:用于Struts辅助开发的一个Eclipse插件】Hibernate【Java开源持久层框架?】 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Eclipse平台下的Hibernate辅助开发工具:【HibernateSynchronizer】【MiddlegenIDE】 Quartz【Java开源调度框架】 Quartz是OpenSymphony开源组织在Jobscheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs 可以做成标准的Java组件或EJBs。Quartz的最新版本为Quartz1.5.0。 Velocity【Java开源模板引擎】 Velocity是一个基于java的模板引擎(templateengine)。它允许任何人仅仅简单的使用模板语言(templatelanguage)来引用由java代码定义的对象。当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一

WEB应用数据权限控制

WEB应用 数据权限控制 轻量级解决方案 aliang 2012-3-2

目录 1前言 (3) 2方案目标 (4) 3设计思路 (4) 4逻辑流程图 (6) 5数据库表设计 (7) 6关键技术点 (7) 7方案应用 (8) 8总结 (9)

1前言 很早就想把自己关于WEB应用中数据权限控制的思考写出来同大家分享,一直没有抽出时间,今天总算把此码成文字,以便能给对此感兴趣的朋友提供一种思路。 在许多应用开发中我们都会涉及到权限管理,当然,权限管理主要分两部分,即功能权限和数据访问权限。针对功能权限的控制,想必很多朋友都有很成熟的方案,在此不再废话。本文档主要探讨在WEB应用开发中的数据权限控制。 现在,许多的软件公司开发WEB应用都是利用开源框架S(Struts)S(Spring)H(Hibernate)或S(Struts)S(Spring)I(ibatis)来进行WEB应用开发的。关于数据权限的控制一般都是在代码开发时对访问数据库数据的SQL语句添加涉及数据权限控制的WHERE条件来实现。这样做的弊端就是在开发时就要详细分析哪些数据需要加入权限控制,并且这些关于数据权限控制的代码散布到整个应用中。一旦需要调整时就要对许多的SQL语句扒拉一边进行修改,很是耗费精力。 在做项目时,我也同样经受过这样的痛苦,于是我就想,能否把WEB应用的数据权限控制独立出来,就象Spring和切面编程一样,做到代码侵入度最低,灵活方便的添加数据权限控制。于是就有了我下面的思考和验证。 许多成熟的开发平台都有自己的一套关于数据权限控制的方案,这些控制都是依托数据集来完成的,通过把数据访问的规则加到数据集上来实现对数据访问的控制。但在WEB应用开发中,这些开源框架中都没有数据集的概念或展现,准确的说是很难在开发或运行状态下获取到有哪些数据集及数据项。 其实数据集的本质就是SQL语句返回的结果集(从XML或表格文件等形成的数据集不在此讨论范围),对数据集加入数据访问控制就是对SQL语句加入数据过滤条件。既然开源框架中没有数据集可用,那我们是否可以把数据访问控制直接应用到数据库表或视图上来达到目的呢?经过思考和验证完全可以做到。

各种框架架构图简介

1.Spring 架构图 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架。Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定J2EE 服务的可重用业务和数据访问对象。这样的对象可以在不同J2EE 环境(Web或EJB )、独立应用程序、测试环境之间重用。 组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: ?核心容器:核心容器提供Spring 框架的基本功能。核心容器的主要组件是BeanFactory ,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC )模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 ?Spring 上下文:Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如JNDI 、EJB 、电子邮件、国际化、校验和调度功能。 ?Spring AOP :通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring 框架中。所以,可以很容易地使Spring 框架管理的任何对象支持AOP 。Spring AOP 模块为基于Spring 的应用程序 中的对象提供了事务管理服务。通过使用Spring AOP ,不用依赖EJB 组 件,就可以将声明性事务管理集成到应用程序中。

?Spring DAO :JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向JDBC 的异常遵从通用的DAO 异常层次结构。 ?Spring ORM :Spring 框架插入了若干个ORM 框架,从而提供了ORM 的对象关系工具,其中包括JDO 、Hibernate 和iBatis SQL Map 。所有这些都遵从Spring 的通用事务和DAO 异常层次结构。 2.ibatis 架构图 ibatis 是一个基于Java的持久层框架。 iBATIS 提供的持久层框架包括SQL Maps 和Data Access Objects ( DAO ),同时还提供一个利用这个框架开发的 JPetStore 实例。 IBATIS :最大的优点是可以有效的控制sql 发送的数目,提高数据层的执行效率!它需要程序员自己去写sql 语句,不象hibernate 那样是完全面向对象的,自动化的,ibatis 是半自动化的,通过表和对象的映射以及手工书写的sql 语句,能够实现比hibernate 等更高的查询效率。 Ibatis 只是封装了数据访问层,替我们做了部分的对象关系映射。但代价是必须要写xml配置文件,相对于Hibernate 还要写很多sql 。Hibernate 通过工具直接从数据库模式生成实体类和基本的配置文件,而且大部分情况下不需要我们写sql ,会较大的提升开发效率。但这些也有很多的局限性,尤其是对

BI数据权限解决方案

BI数据分析是目前企业的热门应用,而对企业来说,权限控制是非常重要的,尤其是作为决策用的企业报表。目前基于微软SQL Server体系的BI架构为Integration Services + Analysis Service + Reporting Services,Integration Services和Analysis都属于应用后台的服务,不会在用户前端展现,其权限控制体系不在我们这篇文章的讨论范围内(但是实现数据级权限控制,需要Analysis Services的参与)。而对于前端展示用的企业报表,权限控制体系分为2种:报表级权限和数据级权限。报表级权限较为简单,主要用于控制谁能够看这个报表;数据级权限则比较复杂了,任何人看同一张报表,报表上的数据只能是他有权限查看的数据。简单说,就是总经理看到的数据和经理看到的数据是不一样的,虽然他们在看同一张报表。比较报表级权限和数据级权限,会发现如果实现了数据级权限的控制,那么企业报表是否需要进行权限控制已经不再重要(当然,为了界面友好性,还是应该控制下的)。 这篇文章主要就是讲述基于SQL Server架构的BI数据级权限的解决方案,这也是我给一个德国大型跨国企业客户实施其BI项目中,对方非常重视的一个功能。这里先简单介绍下这个客户和项目,出于保密要求,我把该客户叫做Customer S(简称CS,呵呵,不是那个游戏哦)。 CS项目前端采用Sharepoint,后台采用SQL Server,主要分析客户S的销售数据。CS的组织结构分为部门、区域;部门和区域是相互交叉的;某个部门的总部人员能够看到全国所有区域的数据;而区域员工则只能看到该区域的数据了。用户能够查看的数据权限,需要在网页上可以进行配置。这就是客户对数据级权限的要求。 针对这些需求,数据级权限解决方案采用如下架构: 报表查看流程说明: 用户查看报表

开源工作流框架及平台集成分析报告

开源工作流框架及平台集成分析报告 目录 1.Java主要开源工作流列表 (1) 1.1.jBpm (1) 1.2.OSWorkflow (1) 1.3.Enhydra Shark (1) 1.4.Activiti5 (1) 1.5.OpenWFE (1) 1.6.Werkflow (1) 1.7.OFBiz (2) 1.8.Flow4J (2) 1.9.ObjectWeb Bonita (2) 1.10.OBPM (2) 2.四大开源工作流框架分析 (2) 2.1.JBpm (2) 优点 (2) 缺点 (3) 2.2.OSWorkflow (3) 优点 (3) 缺点 (3) 2.3.Enhydra Shark (3) 优点 (3) 缺点 (3) 2.4.Activiti5 (4) 优点 (4) 缺点 (4) 3.与统一开发平台集成 (4) 3.1.流程定义插件集成 (4) 3.2.核心包及jar包集成 (4) 3.3.部署方式 (4) 3.4.版本选择与维护问题 (5)

1.Java主要开源工作流列表 1.1. jBpm jBpm是一个灵活可扩展的工作流管理系统。作为jBpm运行时server输入的业务流程使用简单强大的语言表达并打包在流程档案中。jBpm将工作流应用开发的便利性和杰出的企业应用集成(EAI)能力结合了起来。 1.2. OSWorkflow OSWorkflow是一个灵活的工作流引擎,设计成可嵌入到企业应用程序中。它提供了许多的持久化API支持包括:EJB,Hibernate,JDBC和其它。 1.3. Enhydra Shark Shark完全基于WfMC和OMG标准,使用XPDL作为工作流定义语言。流程和活动的存储使用Enhydra DODS(一个开源OR映射工具)。 1.4. Activiti5 Activit5继承了jBpm4的所有优点,支持最新BPMN2.0规范,实现了流程的可视化以及创新的Activiti Cycle协作组件,此外,通过与Mule的集成加强了其集成能力。 1.5. OpenWFE OpenWFE是一个开放源码的Java工作流引擎。它是一个完整的业务处理管理套件:一个引擎,一个工作列表,一个Web界面和一个反应器(存放自动代理)。可以与应用程序很好的给合。 1.6. Werkflow Werkflow是一个灵活可扩展的基于流程和状态的工作流引擎。它的目标是满足可以想象的所有工作流程,从企业级的业务流程到小范围的用户交互流程。通过使用可插拔和分层结构,可以方便地容纳各种工作流语义.

数据库权限分配

管理软件中的用户权限分配权限的分配是所有管理软件中必不可少的部分,其实现的方式主要有两大类,以下做出简单的介绍。 1.基于角色管理的系统访问控制 MIS(管理信息系统)中包括信息量巨大以及不同程度的信息敏感度,各种有访问需求的用户,使得其安全管理非常复杂。基于角色的系统安全控制模型是目前国际上流行的先进的安全管理控制方法。其特点是通过分配和取消角色来完成用户权限的授予和取消。安全管理人员根据需要定义各种角色,并设置合适的访问权限,而用户根据其责任和资历再被指派为不同的角色。这样,整个访问控制过程就分成两个部分,即访问权限与角色相关联,角色再与用户关联,从而实现了用户与访问权限的逻辑分离,如下图所示,角色可以看成是一个表达访问控控制策略的语义结构,它可以表示承担特定工作的资格。 例: 这种控制模式下DBMS会根据不同users所属的role不同来做权限的验证,每个role具有其特定的权限,然后再配合一定的程序来控制user在用户界面中的操作权限。 连接数据库的字符串示例: CString DataBaseName=_T("MFTDMA"); CString DataBaseServer=_T("PC-20090727OAEE"); CString temp=_T("Provider=SQLOLEDB;Server=")+DataBaseServer+_T(";Database=")+ DataBaseName+_T(";uid="); temp.Append(name);

temp.Append(_T(";pwd=")); temp.Append(pwd); temp.Append(_T(";")); 优点:是主流的安全管理控制方式,代码中不会泄露数据库的连接用户及其密码,有很好的安全性,并可以一定程度上防止SQL注入攻击,权限体系的结构明晰,不容易混淆。适用于权限层次比较复杂的系统。 缺点:配置权限到角色的工作比较复杂,需要对每个角色的权限有清晰的了解并精确的在DBMS中建立权限分配及约束。此外在用户登录验证时需要一定的处理来避免权限分配的冲突。 2.编程实现系统访问控制 基于角色管理的系统访问控制是通过DBMS和一定程序控制来实现用户的权限控制,此外也可以完全利用程序代码来实现权限的控制,其基本的思想是:在数据库连接时使用一个统一的数据库用户(以下称为DBUSER)和密码,DBUSER拥有数据库的操作权限(包括增加、删除、修改、更新、查询等)。在应用程序的用户(以下称为PUSER)登录时使用DBUSER连接数据库并查询该PUSER的权限,再根据PUSER的权限信息通过编写控制程序来实现其所能进行的操作。 例:建立如下图的用户表 在用户登录时查询用户表里的信息验证用户输入的用户名和密码,验证成功后记录该用户的用户类型以此来控制该用户所能进行的操作。 连接数据的字符串示例: Provider=SQLOLEDB.1;Server=PC-20090727OAEE;Database=ABC; uid=sa; pwd=330330; 优点:实现比较简单,由于是利用程序做权限控制所以有一定的灵活性,适合用于权限层次结构比较简单的系统。 缺点:在代码中会出现连接数据库的用户名及其密码,如果被反编译则会让破坏者取得访问数据库的权限。

相关主题
文本预览
相关文档 最新文档