请问:我要做一个基于J2EE的权限管理系统,应该怎么样下手?

时间:2022-11-27 17:45:03
如题,这是我的论文方向,感到无从下手,请高手指点

28 个解决方案

#1


帮你up...

我也正在写论文!

#2


1:框架上,需要页面安全访问控制。
2:业务上,用户分组、角色、业务权限控制等。

#3


3个表,用户,角色,权限!!!!!!

#4


基于J2EE的权限管理系统? 即将是论文,我觉得如可由如下几方面入手:
1。Java自身的安全管理策略的论述。
2。Web Server访问控制策略的论述。
3。web.xml中对于资源访问控制及认证方式的论述。
4。基于Servlet API Filter机制的论述.
5。业务系统权限控制机制的论述及设计(User-Role-Right以及数据权限).
6。SSO(单点登录)机制中权限相关论述.

但愿有用。

#5


我觉得 得从两个方面下手,

第一,正如楼上所说,需要创建那几个表,这个主要用于对不同的用户配置不同的连接,
也就是说,如果你具有该权限,你的页面上才能有这个连接,否则,没有这个连接!

光这样做是不够的。
第二,根据,用户的级别,设置用户查询数据库的权限:
比如说:系统管理员:select * from user 
        操作员:select * from user where ........
在这里进行控制,也就是说,如果你直接在地址栏输入了你没有权限的模块的地址,但是实际你进去之后还是不能操作的,因为就没有满足查询条件的记录,当然,这只是对查询进行控制,同样,对于其他操作,如添加,删除,你也可以这样控制。

一般的系统,只要这两个方面进行控制,基本就可以满足其安全方面的要求了。

#6


up

#7


UP

#8


顶!

#9


感谢各位的指点~~
J2EE很庞大,不知道在工具选取方面要注意些什么呢?

#10


rbac ,acl

#11


我最近在做一个CMS,核心模块也包含权限管理
在数据库设计方面我用的是CASE Studio 2
core_authority操作表
core_component系统模块表(你的权限管理应该也是基于不同模块的)
core_parameter系统参数表
core_role系统角色表
core_role_power角色权限表
core_user系统用户表
core_user_role用户角色映射表

开发工具我用的是Tomcat5.5.9+MySQL+Eclipse+Hibernate2.1+Struts1.2.8

另外最近发现HibernateSychornizer自动生成的_baseRootDAO.java有些细节上的问题,不能直接用,需要手工改一下

#12


看看acegi吧,tomcat也有验证授权机制
基本就是url匹配角色,角色对应权限

#13


如果我下载了一个开源代码,只是一个.jar文件。我该怎么使用呢?

#14


首先要明确需求,认识系统里到底有多少可以划分出来的权限

权限控制模块的设计应分为3 个方面:权限列表结构设计、权限管理机制设计和运行控制机制设计。
权限列表结构设计属于系统设计数据结构设计层次,是权限控制机制代码设计的基础。
其设计可采用权限字段化和权限数值化两种模式。
对用户权限的管理包括授权(Grant)和撤消(Revoke) 两类操作。
运行控制机制是指根据用户权限将其操作限制在权限允许的范围内,运行控制机制的设计是业务分工权限化管理的具体实施阶段。
   1. 隐藏功能型(Invisible Style)
   该类型控制方式是只对用户提供其权限允许的操作,隐藏无权执行的操作调用(选单项或命令按钮)。这种控制方式的优点是用户操作界面与其业务分工相对应,无多余的业务内容影响其操作视野,故实用性强,而且非授权操作的不可见性在一定程度上提高了系统的安全性。
2. 禁止功能型(Disable Style)
   该类型控制方式是只激活(Enable)用户权限对应的操作调用(选单项或命令按钮),禁止(Disable)无权执行的操作调用(选单项及命令按钮)。这种控制方式的优点是能够全面体现系统所具有的功能,使用户对系统所能进行的操作有了全面的了解,在主观上给用户以系统的设计完全符合其要求
的满足感;但其缺点是操作界面与用户业务分工不一致,操作界面略显混乱,更重要的是系统功能的全部暴露容易给不法分子指定攻击目标,威胁系统的安全运行。
3. 触发检查型(Triggering Check Style)
   该类型的运行控制方式是用户一旦选择某项操作则立刻激活权限检查,决定其是否有权执行该项操作,若有则执行该操作,否则系统将拒绝执行。
   实现过程:将权限检查放入功能调用模块代码的首部,由其决定是否执行该操作。

权限往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真
who how to do what?

  1.表单式认证,这是常用的,但用户到达一个不被授权访问的资源时,Web容器就发出一个html页面,要求输入用户名和密码。
  2.一个基于Servlet Sign in/Sign out来集中处理所有的Request,缺点是必须由应用程序自己来处理。
  3.用Filter防止用户访问一些未被授权的资源,Filter会截取所有Request/Response,
  然后放置一个验证通过的标识在用户的Session中,然后Filter每次依靠这个标识来决定是否放行Response

#15


如果我下载了一个开源代码,只是一个.jar文件。我该怎么使用呢?

#16


自动生成JAVA+strust和.Net代码.
自动生成MS SQL2000 Server存储过程.
http://60.191.0.85/cx/download/Java_AutoCode.rar

#17


自己写的话,基于Spring的aop思想,利用拦截器
或者可以直接用acegi

#18


http://60.191.0.85/cx/download/Java_AutoCode.rar
无法打开该页面

#19


偶也在做与这方面相关的课题......................

#20


Acegi

http://www.blogjava.net/youlq/archive/2005/12/06/22678.html

#21


目前权限管理有如下几种技术
1。RBAC(Role Based Access Control):基于角色的访问控制,这种思想下,role是系统核心,它是用户(user)和资源(系统开发给用户的可用资源),这里user是一个抽象概念,你可以扩展细化,资源,简单的说,比如你web资源的url,对这种资源,一般情况下你还要加多访问控制,比如各种操作(CRUD等),这种模型实现相对简单,也很成熟,很多系统的权限控制都是这样实现的
2。ACL(Access Control List)访问控制列表;window的权限模型,可以查相关资料了解
3。两种模式的混合

对一个学生,我觉得能够把经典的rbac实现的好就足够了

#22


不知道哪位高手可以推荐几本关于权限设计方面的书,最好还有实例,可以学习和参考一下。感谢感谢!!!

#23


不知道哪位高手可以推荐几本关于权限设计方面的书,最好还有实例,可以学习和参考一下。感谢感谢!!!

#24


现在还有人在用hibernate2.1?

#25


不知道哪位高手可以推荐几本关于权限设计方面的书,最好还有实例,可以学习和参考一下。感谢感谢!!!

#26


恩,受益非浅,望高手们再说的细致一点.
个人感觉一个复杂的cms系统,就权限控制比较麻烦.
sping的aop思想很好,但具体作起来缺乏实例性的东西参考.
界面实现上如果比较复杂的话用jsf最好了.
jsf in action这本书里有个比较经典的例子.

#27


Acegi

http://www.blogjava.net/youlq/archive/2005/12/06/22678.html

恩,看了jfy3d(剑事) 推荐的这篇文章和实例很受启发,建议大家都看看.
一直说找不到sping的aop实现用户权限限制的例子,这个例子就很好.

#28


这儿还有篇文章.当初保存文章时没有把原地址保存.也是csdn上的文章.


Spring AOP实际应用一例     选择自 pbMaster 的 Blog
 


    在WEB开发中,用户对网页的访问权限检查是一个重要的环节。以STRUST为例,我们需要在Action的excute方法中编写相关的代码(一般是调用基类的函数),也很显然,在每个Action中这是一种重复劳动。
如果我们在excute运行之前,能够自动去调用基类的权限检查函数,这无疑是个好的解决办法。AOP就为我们提供了这样一种解决方法。

    下面以一个简化的实例介绍实现的办法。

    首先我们做一个接口:
 

public interface CheckInterface {
  public abstract void check(String name);
  public abstract void excute(String name);
}


再做一个基类:
public abstract class BaseClass implements CheckInterface {
public BaseClass() {
}
public void check(String name){
if (name.equals("supervisor"))
System.out.println("Check Pass!!");
else {
System.out.println("No access privilege! Please do sth. else!");
}
}
}
再做一个测试类:
public class ExcuteClass extends BaseClass {
public ExcuteClass() {
}

public void excute(String name){
System.out.println("Excute here!"+name);
}
}

好了,下面做一个通知类(Advice):
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
import org.apache.log4j.Logger;

public class BeforeAdvisor implements MethodBeforeAdvice {
private static Logger logger=Logger.getLogger(BeforeAdvisor.class);
public void before(Method m, Object[] args, Object target) throws Throwable {
if (target instanceof CheckInterface){
logger.debug("Is Instanceof CheckInterface!!!");
CheckInterface ci=(CheckInterface)target;
ci.check((String)args[0]);
}
}
}
其中重要的before方法的参数:Object target传入的通知的对象(即测试类的接口),Method m, Object[] args分别是该对象被调用的方法和参数。
我们再来作spring bean定义xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<description>Spring Quick Start</description>
<bean id="MyAdvisor" class="com.wysm.netstar.test.springaop.BeforeAdvisor"/>

<bean id="myPointcutAdvisor2" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref local="MyAdvisor" />
</property>
<property name="patterns">
<list>
<value>.*excute.*</value>
</list>
</property>
</bean>

<bean id="checkInterface" class="com.wysm.netstar.test.springaop.ExcuteClass"/>

<bean id="myCheckClass" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.wysm.netstar.test.springaop.CheckInterface</value>
</property>
<property name="target">
<ref local="checkInterface" />
</property>
<property name="interceptorNames">
<value>myPointcutAdvisor2</value>
</property>
</bean>

</beans>
这个定义文件指明了ExcuteClass为监视对象,它的excute方法被执行的时候,BeforeAdvisor将被调用。

最后是测试类:
import junit.framework.TestCase;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class SpringTestCase2 extends TestCase {
CheckInterface test=null;

    protected void setUp() throws Exception {
super.setUp();
ApplicationContext ctx=new FileSystemXmlApplicationContext("src/com/wysm/netstar/test/springaop/aoptest.xml");
test = (CheckInterface) ctx.getBean("myCheckClass");
}

    protected void tearDown() throws Exception {
super.tearDown();
}
public void testExcute(){
test.excute("supervisor");
}
}

#1


帮你up...

我也正在写论文!

#2


1:框架上,需要页面安全访问控制。
2:业务上,用户分组、角色、业务权限控制等。

#3


3个表,用户,角色,权限!!!!!!

#4


基于J2EE的权限管理系统? 即将是论文,我觉得如可由如下几方面入手:
1。Java自身的安全管理策略的论述。
2。Web Server访问控制策略的论述。
3。web.xml中对于资源访问控制及认证方式的论述。
4。基于Servlet API Filter机制的论述.
5。业务系统权限控制机制的论述及设计(User-Role-Right以及数据权限).
6。SSO(单点登录)机制中权限相关论述.

但愿有用。

#5


我觉得 得从两个方面下手,

第一,正如楼上所说,需要创建那几个表,这个主要用于对不同的用户配置不同的连接,
也就是说,如果你具有该权限,你的页面上才能有这个连接,否则,没有这个连接!

光这样做是不够的。
第二,根据,用户的级别,设置用户查询数据库的权限:
比如说:系统管理员:select * from user 
        操作员:select * from user where ........
在这里进行控制,也就是说,如果你直接在地址栏输入了你没有权限的模块的地址,但是实际你进去之后还是不能操作的,因为就没有满足查询条件的记录,当然,这只是对查询进行控制,同样,对于其他操作,如添加,删除,你也可以这样控制。

一般的系统,只要这两个方面进行控制,基本就可以满足其安全方面的要求了。

#6


up

#7


UP

#8


顶!

#9


感谢各位的指点~~
J2EE很庞大,不知道在工具选取方面要注意些什么呢?

#10


rbac ,acl

#11


我最近在做一个CMS,核心模块也包含权限管理
在数据库设计方面我用的是CASE Studio 2
core_authority操作表
core_component系统模块表(你的权限管理应该也是基于不同模块的)
core_parameter系统参数表
core_role系统角色表
core_role_power角色权限表
core_user系统用户表
core_user_role用户角色映射表

开发工具我用的是Tomcat5.5.9+MySQL+Eclipse+Hibernate2.1+Struts1.2.8

另外最近发现HibernateSychornizer自动生成的_baseRootDAO.java有些细节上的问题,不能直接用,需要手工改一下

#12


看看acegi吧,tomcat也有验证授权机制
基本就是url匹配角色,角色对应权限

#13


如果我下载了一个开源代码,只是一个.jar文件。我该怎么使用呢?

#14


首先要明确需求,认识系统里到底有多少可以划分出来的权限

权限控制模块的设计应分为3 个方面:权限列表结构设计、权限管理机制设计和运行控制机制设计。
权限列表结构设计属于系统设计数据结构设计层次,是权限控制机制代码设计的基础。
其设计可采用权限字段化和权限数值化两种模式。
对用户权限的管理包括授权(Grant)和撤消(Revoke) 两类操作。
运行控制机制是指根据用户权限将其操作限制在权限允许的范围内,运行控制机制的设计是业务分工权限化管理的具体实施阶段。
   1. 隐藏功能型(Invisible Style)
   该类型控制方式是只对用户提供其权限允许的操作,隐藏无权执行的操作调用(选单项或命令按钮)。这种控制方式的优点是用户操作界面与其业务分工相对应,无多余的业务内容影响其操作视野,故实用性强,而且非授权操作的不可见性在一定程度上提高了系统的安全性。
2. 禁止功能型(Disable Style)
   该类型控制方式是只激活(Enable)用户权限对应的操作调用(选单项或命令按钮),禁止(Disable)无权执行的操作调用(选单项及命令按钮)。这种控制方式的优点是能够全面体现系统所具有的功能,使用户对系统所能进行的操作有了全面的了解,在主观上给用户以系统的设计完全符合其要求
的满足感;但其缺点是操作界面与用户业务分工不一致,操作界面略显混乱,更重要的是系统功能的全部暴露容易给不法分子指定攻击目标,威胁系统的安全运行。
3. 触发检查型(Triggering Check Style)
   该类型的运行控制方式是用户一旦选择某项操作则立刻激活权限检查,决定其是否有权执行该项操作,若有则执行该操作,否则系统将拒绝执行。
   实现过程:将权限检查放入功能调用模块代码的首部,由其决定是否执行该操作。

权限往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真
who how to do what?

  1.表单式认证,这是常用的,但用户到达一个不被授权访问的资源时,Web容器就发出一个html页面,要求输入用户名和密码。
  2.一个基于Servlet Sign in/Sign out来集中处理所有的Request,缺点是必须由应用程序自己来处理。
  3.用Filter防止用户访问一些未被授权的资源,Filter会截取所有Request/Response,
  然后放置一个验证通过的标识在用户的Session中,然后Filter每次依靠这个标识来决定是否放行Response

#15


如果我下载了一个开源代码,只是一个.jar文件。我该怎么使用呢?

#16


自动生成JAVA+strust和.Net代码.
自动生成MS SQL2000 Server存储过程.
http://60.191.0.85/cx/download/Java_AutoCode.rar

#17


自己写的话,基于Spring的aop思想,利用拦截器
或者可以直接用acegi

#18


http://60.191.0.85/cx/download/Java_AutoCode.rar
无法打开该页面

#19


偶也在做与这方面相关的课题......................

#20


Acegi

http://www.blogjava.net/youlq/archive/2005/12/06/22678.html

#21


目前权限管理有如下几种技术
1。RBAC(Role Based Access Control):基于角色的访问控制,这种思想下,role是系统核心,它是用户(user)和资源(系统开发给用户的可用资源),这里user是一个抽象概念,你可以扩展细化,资源,简单的说,比如你web资源的url,对这种资源,一般情况下你还要加多访问控制,比如各种操作(CRUD等),这种模型实现相对简单,也很成熟,很多系统的权限控制都是这样实现的
2。ACL(Access Control List)访问控制列表;window的权限模型,可以查相关资料了解
3。两种模式的混合

对一个学生,我觉得能够把经典的rbac实现的好就足够了

#22


不知道哪位高手可以推荐几本关于权限设计方面的书,最好还有实例,可以学习和参考一下。感谢感谢!!!

#23


不知道哪位高手可以推荐几本关于权限设计方面的书,最好还有实例,可以学习和参考一下。感谢感谢!!!

#24


现在还有人在用hibernate2.1?

#25


不知道哪位高手可以推荐几本关于权限设计方面的书,最好还有实例,可以学习和参考一下。感谢感谢!!!

#26


恩,受益非浅,望高手们再说的细致一点.
个人感觉一个复杂的cms系统,就权限控制比较麻烦.
sping的aop思想很好,但具体作起来缺乏实例性的东西参考.
界面实现上如果比较复杂的话用jsf最好了.
jsf in action这本书里有个比较经典的例子.

#27


Acegi

http://www.blogjava.net/youlq/archive/2005/12/06/22678.html

恩,看了jfy3d(剑事) 推荐的这篇文章和实例很受启发,建议大家都看看.
一直说找不到sping的aop实现用户权限限制的例子,这个例子就很好.

#28


这儿还有篇文章.当初保存文章时没有把原地址保存.也是csdn上的文章.


Spring AOP实际应用一例     选择自 pbMaster 的 Blog
 


    在WEB开发中,用户对网页的访问权限检查是一个重要的环节。以STRUST为例,我们需要在Action的excute方法中编写相关的代码(一般是调用基类的函数),也很显然,在每个Action中这是一种重复劳动。
如果我们在excute运行之前,能够自动去调用基类的权限检查函数,这无疑是个好的解决办法。AOP就为我们提供了这样一种解决方法。

    下面以一个简化的实例介绍实现的办法。

    首先我们做一个接口:
 

public interface CheckInterface {
  public abstract void check(String name);
  public abstract void excute(String name);
}


再做一个基类:
public abstract class BaseClass implements CheckInterface {
public BaseClass() {
}
public void check(String name){
if (name.equals("supervisor"))
System.out.println("Check Pass!!");
else {
System.out.println("No access privilege! Please do sth. else!");
}
}
}
再做一个测试类:
public class ExcuteClass extends BaseClass {
public ExcuteClass() {
}

public void excute(String name){
System.out.println("Excute here!"+name);
}
}

好了,下面做一个通知类(Advice):
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
import org.apache.log4j.Logger;

public class BeforeAdvisor implements MethodBeforeAdvice {
private static Logger logger=Logger.getLogger(BeforeAdvisor.class);
public void before(Method m, Object[] args, Object target) throws Throwable {
if (target instanceof CheckInterface){
logger.debug("Is Instanceof CheckInterface!!!");
CheckInterface ci=(CheckInterface)target;
ci.check((String)args[0]);
}
}
}
其中重要的before方法的参数:Object target传入的通知的对象(即测试类的接口),Method m, Object[] args分别是该对象被调用的方法和参数。
我们再来作spring bean定义xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<description>Spring Quick Start</description>
<bean id="MyAdvisor" class="com.wysm.netstar.test.springaop.BeforeAdvisor"/>

<bean id="myPointcutAdvisor2" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref local="MyAdvisor" />
</property>
<property name="patterns">
<list>
<value>.*excute.*</value>
</list>
</property>
</bean>

<bean id="checkInterface" class="com.wysm.netstar.test.springaop.ExcuteClass"/>

<bean id="myCheckClass" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.wysm.netstar.test.springaop.CheckInterface</value>
</property>
<property name="target">
<ref local="checkInterface" />
</property>
<property name="interceptorNames">
<value>myPointcutAdvisor2</value>
</property>
</bean>

</beans>
这个定义文件指明了ExcuteClass为监视对象,它的excute方法被执行的时候,BeforeAdvisor将被调用。

最后是测试类:
import junit.framework.TestCase;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class SpringTestCase2 extends TestCase {
CheckInterface test=null;

    protected void setUp() throws Exception {
super.setUp();
ApplicationContext ctx=new FileSystemXmlApplicationContext("src/com/wysm/netstar/test/springaop/aoptest.xml");
test = (CheckInterface) ctx.getBean("myCheckClass");
}

    protected void tearDown() throws Exception {
super.tearDown();
}
public void testExcute(){
test.excute("supervisor");
}
}