我正在使用GlassFish服务器4.0,其中我已经为不同的用户分配了不同的权限/角色.
用户可能具有多个权限/角色.例如,管理员用户可以与ROLE_ADMIN(以执行管理任务)和ROLE_USER(以作为注册用户执行任务)相关联.
在我看来web.xml,这个配置如下.
<security-constraint>
<display-name>AdminConstraint</display-name>
<web-resource-collection>
<web-resource-name>ROLE_ADMIN</web-resource-name>
<description/>
<url-pattern>/admin_side/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>ROLE_ADMIN</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<display-name>UserConstraint</display-name>
<web-resource-collection>
<web-resource-name>ROLE_USER</web-resource-name>
<description/>
<url-pattern>/user_side/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>ROLE_USER</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<!--<auth-method>DIGEST</auth-method>-->
<auth-method>FORM</auth-method>
<realm-name>projectRealm</realm-name>
<form-login-config>
<form-login-page>/utility/Login.jsf</form-login-page>
<form-error-page>/utility/ErrorPage.jsf</form-error-page>
</form-login-config>
</login-config>
<security-role>
<description/>
<role-name>ROLE_ADMIN</role-name>
</security-role>
<security-role>
<description/>
<role-name>ROLE_USER</role-name>
</security-role>
Run Code Online (Sandbox Code Playgroud)
这很好用.
有两种URL模式/admin_side/*和/user_side/*.管理员有两个角色ROLE_ADMIN和ROLE_USER.
当管理员使用权限登录时,应该访问位于ROLE_USER其中的唯一资源/user_side/*./admin_side/*应禁止访问位于的资源,因为管理员以注册用户身份登录,而不是以管理员身份登录.
到目前为止,我的情况是,当管理员使用任何权限登录时,可以访问这两个位置的资源,这是完全非法的.这是因为系统能够找到该特定用户的权限.
如何让每个用户根据其权限/角色访问特定位置的资源? …
我在web.xml中定义了以下内容:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/shared/errors/DefaultErrorPage.xhtml</location>
</error-page>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/shared/errors/ViewExpired.xhtml</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
我也在faces-config.xml中使用Omnifaces的FullAjaxExceptionHandler:
<factory>
<exception-handler-factory>
org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory
</exception-handler-factory>
</factory>
Run Code Online (Sandbox Code Playgroud)
FullAjaxExceptionHandler对于ajax调用工作正常,但是当我直接点击页面并且出现错误时,它开始呈现我试图去的页面,但它没有完成,然后在web中定义了错误页面.呈现xml,这导致在部分呈现的页面之后嵌入错误页面.
(我正在使用具有Mojarra JSF 2.1.3的Glassfish 3.1.1)编辑:现在使用Glassfish 3.1.2.2和JSF 2.1.11
编辑:发现以下内容:发生错误的页面使用模板(<ui:composition template="/shared/shared/commonLayout.xhtml">)如果我更改它以使页面不再使用模板,然后只需添加模板中的所有代码,那么它可以正常工作.
我习惯于一直使用GlassFish服务器.我正在将一个Java EE应用程序从GlassFish(4.0)迁移到WildFly 8.1.0 final.
我尝试在服务器上使用此插件在NetBeans 8.0上使用WildFly 8.1.0 final ,因为服务器没有内置插件.
但是,与GlassFish不同,即使启用了IDE上的" 部署保存"选项,也不会将该应用程序部署在保存项目数据上.该应用程序导致非常奇怪/未知/异常的问题.例如,这个问题充满了(仅仅)一些问题.
我将NetBeans升级到8.0.1(使用JSF到2.2.8-02),它有一个内置的WildFly-Plugin,但它也带来了与之前版本的IDE无关的所有差异.
在这个错误报告的评论中,提到通过更改/添加对应于JDBC驱动程序的一些XML来进行修复,如下所示,
<driver name="mysql" module="com.mysql">
<xa-datasource-class>
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
</xa-datasource-class>
</driver>
Run Code Online (Sandbox Code Playgroud)
我也对standalone-full.xml文件进行了此更改.这个特殊部分如下所示.
<subsystem xmlns="urn:jboss:domain:datasources:2.0">
<datasources>
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
<datasource jta="false" jndi-name="java:/jdbc/project_datasource" pool-name="project_datasource" enabled="true" use-ccm="false">
<connection-url>jdbc:mysql://localhost:3306/projectdb</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver>mysql</driver>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>15</max-pool-size>
</pool>
<security>
<user-name>root</user-name>
<password>root</password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
<drivers>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
<driver name="mysql" …Run Code Online (Sandbox Code Playgroud)