相关疑难解决方法(0)

如何让每个用户根据他们在JAAS中的权限/角色访问特定位置的资源?

我正在使用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_ADMINROLE_USER.

当管理员使用权限登录时,应该访问位于ROLE_USER其中的唯一资源/user_side/*./admin_side/*应禁止访问位于的资源,因为管理员以注册用户身份登录,而不是以管理员身份登录.

到目前为止,我的情况是,当管理员使用任何权限登录时,可以访问这两个位置的资源,这是完全非法的.这是因为系统能够找到该特定用户的权限.

如何让每个用户根据其权限/角色访问特定位置的资源? …

security jaas java-ee jdbcrealm glassfish-4

6
推荐指数
1
解决办法
1078
查看次数

web.xml中定义的错误页面嵌入在部分呈现的JSF页面中

我在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">)如果我更改它以使页面不再使用模板,然后只需添加模板中的所有代码,那么它可以正常工作.

jsf-2

5
推荐指数
1
解决办法
1789
查看次数

将WildFly应用程序服务器与NetBeans IDE一起使用

我习惯于一直使用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)

java netbeans wildfly netbeans-8 wildfly-8

5
推荐指数
1
解决办法
1万
查看次数