在开发者角度来说,应用程序本身只需定义那些角色”role” 可访问哪些方法, 具体的角色与实际系统中用户的映射关系由deployer 来定义。 一. application.xml 定义需要用到的Role <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'> <application> <display-name>EjbTest</display-name> <module> <ejb>EjbTest.jar</ejb> </module> <security-role> <description></description> <role-name>MyRole1</role-name> </security-role> </application> 二. weblogic-application.xml 把系统用户(springview)映射到Role(MyRole1) <!DOCTYPE weblogic-application PUBLIC '-//BEA Systems, Inc.//DTD WebLogic Application 8.1.0//EN' 'http://www.bea.com/servers/wls810/dtd/weblogic-application_2_0.dtd'> <weblogic-application> <security> <security-role-assignment> <role-name>MyRole1</role-name> <principal-name> springview </principal-name> </security-role-assignment> </security> <application-param> <param-name>webapp.encoding.default</param-name> <param-value>UTF-8</param-value> </application-param> <classloader-structure> </classloader-structure> </weblogic-application> 三. ejb-jar.xml 定义了那些方法可被那些角色访问 <ejb-jar> <enterprise-beans> <session> <ejb-name>Ses</ejb-name> <home>src.SesHome</home> <remote>src.Ses</remote> <ejb-class>src.SesBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> <security-role-ref> <!-- 定义了可在程序中使用的不变的MyRole映射名称 --> <role-name>MyRole1</role-name> <role-link>MyRole1</role-link> </security-role-ref> </session> </enterprise-beans> <assembly-descriptor> <!-- 这一段必须要有,定义了在这个ejb 中要使用角色的logicname --> <security-role> <role-name>MyRole1</role-name> </security-role> <method-permission> <!-- 定义了method2 只能由MyRole1 来访问,如果用户以springview名义通过jndi 来lookup 这个ejb 即具有MyRole1 角色 --> <role-name>MyRole1</role-name> <method> <ejb-name>Ses</ejb-name> <method-intf>Remote</method-intf> <method-name>method2</method-name> </method> </method-permission> <method-permission> <role-name>MyRole1</role-name> <method> <ejb-name>Ses</ejb-name> <method-intf>Remote</method-intf> <method-name>method1</method-name> </method> </method-permission> </assembly-descriptor> </ejb-jar> 四. 建立用springview用户登陆 jndi 的InitialContext, 通过该InitialContext 进行lookup 操作的资源或对象(如:ejb) 都具有springview用户身份 private static Context getInitialContext() throws Exception { String url = "t3://localhost:7001"; String user = " springview ";//"test"; String password = " springview1234";//"test"; Properties properties = null; try { properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); properties.put(Context.PROVIDER_URL, url); if (user != null) { properties.put(Context.SECURITY_PRINCIPAL, user); properties.put(Context.SECURITY_CREDENTIALS, password == null ? "" : password); } return new InitialContext(properties); } catch(Exception e) { //log("Unable to connect to WebLogic server at " + url); //log("Please make sure that the server is running."); throw e; //e.printStackTrace() ; } } 
|