0

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

4

2 回答 2

1

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

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

于 2012-06-08T10:11:19.610 回答
0

我建议您使用 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 .

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

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

于 2012-06-12T07:34:19.500 回答