【发布时间】:2012-05-19 23:51:08
【问题描述】:
jsf 2.0、struts 2、spring 3中如何控制直接url访问?我的意思是不登录用户输入 url 并始终显示主页或登录页面。
【问题讨论】:
标签: spring url jakarta-ee jsf-2 struts2
jsf 2.0、struts 2、spring 3中如何控制直接url访问?我的意思是不登录用户输入 url 并始终显示主页或登录页面。
【问题讨论】:
标签: spring url jakarta-ee jsf-2 struts2
我建议你使用 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 站点。
希望对你有所帮助。 谢谢。
【讨论】:
您可以使用 spring-security 之类的项目与您的应用程序集成,也可以编写自己的 servlet-filter
stackoverflow servlet-filter 标签很好地概述了 servlet 过滤器。对于大多数与 servlet 兼容的 Web 框架,您可以集成一个过滤器来拦截请求并将无效或未经授权的请求重定向到它们所属的位置。
【讨论】: