如何控制直接URL访问?

时间:2012-05-11 11:22:41

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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]

查看以前的网址,您会发现/faces/login.xhtml的任何访问权限必须由经过身份验证的用户完成,除了访问您必须为特定角色播放的某些网址(一个或多个)。

在stackoverflow上查看Shiro标记或查看Apache Shiro站点。

我希望能帮助你。 感谢。