2012-05-11 104 views

回答

1

您可以使用一個項目像彈簧安全與您的應用程序集成,或者自己寫servlet的過濾器

的計算器標籤有Servlet過濾器的一個很好的概述。對於大多數與servlet兼容的Web框架,您可以集成過濾器來攔截請求並將無效或未經授權的請求重定向到它們所屬的位置。

+0

Thanks @Alexander。這看起來好多了。 – pd40

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站點。

我希望能幫到你。 謝謝。