【问题标题】:How to control direct url access?如何控制直接 url 访问?
【发布时间】:2012-05-19 23:51:08
【问题描述】:

jsf 2.0、struts 2、spring 3中如何控制直接url访问?我的意思是不登录用户输入 url 并始终显示主页或登录页面。

【问题讨论】:

    标签: spring url jakarta-ee jsf-2 struts2


    【解决方案1】:

    我建议你使用 Apache Shiro 过滤器来控制对某个 url 的直接访问。

    查看 Apache Shiro 配置 ini 文件,其中显示了对 url 访问的控制。

    [main]
    logout = org.apache.shiro.web.filter.authc.LogoutFilter
    roles  = org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
    authc.loginUrl=/faces/login.xhtml
    authc.successUrl=/faces/index.xhtml
    roles.unauthorizedUrl = /faces/unauthorized.xhtml
    logout.redirectUrl = /faces/login.xhtml?status=loggedOut
    jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
    jdbcRealm.permissionsLookupEnabled = true
    jdbcRealm.authenticationQuery = SELECT PASSWORD FROM USERS WHERE USERS.USERNAME = ?
    jdbcRealm.userRolesQuery = SELECT ROLE_NAME FROM ROLES, USER_ROLE, USERS WHERE  ROLES.ROLE_ID = USER_ROLE.ROLE_ID AND USERS.USR_ID = USER_ROLE.USR_ID AND USERS.USERNAME = ?
    jdbcRealm.permissionsQuery = SELECT PERMISSIONS.PERM_NAME FROM ROLES, PERMISSIONS_ROLE, PERMISSIONS WHERE  ROLES.ROLE_ID = PERMISSIONS_ROLE.ROLE_ID AND PERMISSIONS.PERM_ID = PERMISSIONS_ROLE.PERM_ID AND ROLES.ROLE_NAME = ?
    ds = com.mysql.jdbc.jdbc2.optional.MysqlDataSource 
    ds.user = maqraa
    ds.password = maqraa
    ds.databaseName = maqraa
    ds.serverName = localhost
    ds.portNumber = 3306
    jdbcRealm.dataSource = $ds
    securityManager.realms = $jdbcRealm
    
    [urls]
    /faces/login.xhtml = authc
    /faces/admin/** = authc, roles[admin]
    /faces/teacher/** = authc, roles[teacher]
    /faces/reports/** = authc, roles[admin]
    /faces/officer/** = authc, roles[officer]
    /faces/manager/** = authc, roles[manager]
    /faces/roles/** = authc, roles[admin]
    

    查看前面的 url,您会发现对 /faces/login.xhtml 的任何访问都必须由经过身份验证的用户完成,此外还必须访问某些您必须扮演特定角色的 url (s)。

    查看 stackoverflow 上的 Shiro 标签或查看 Apache Shiro 站点。

    希望对你有所帮助。 谢谢。

    【讨论】:

      【解决方案2】:

      您可以使用 spring-security 之类的项目与您的应用程序集成,也可以编写自己的 servlet-filter

      stackoverflow 标签很好地概述了 servlet 过滤器。对于大多数与 servlet 兼容的 Web 框架,您可以集成一个过滤器来拦截请求并将无效或未经授权的请求重定向到它们所属的位置。

      【讨论】:

      • 谢谢@Alexander。这样看起来好多了。
      猜你喜欢
      • 2019-01-08
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多