轉載:http://www.javaeye.com/topic/95432
眾所周知,如果沒有對頁面進行權限控制,用戶只要輸入URL就能進入任何頁面。
下面就演示一下最基本的使用Fiter來控制頁面的權限。
1.寫一個FILTER,用來判斷用戶是否有權限進入指定頁面。
java 代碼
- import java.io.IOException;
-
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
-
- import org.apache.log4j.Logger;
-
- import com.kiral.action.UserAction;
- import com.kiral.model.User;
-
-
-
-
-
-
-
-
- public class FilterServlet extends HttpServlet implements Filter {
- private static final long serialVersionUID = 5162189625393315379L;
-
- private static Logger LOG = Logger.getLogger(FilterServlet.class);
-
-
-
-
- private String allowRole = null;
-
-
-
-
- private String redirectURl = null;
-
- public void init(FilterConfig filterConfig) throws ServletException {
-
- allowRole = filterConfig.getInitParameter("allowRole");
-
- redirectURl = "/locker/index.html";
- }
-
-
-
-
- public void doFilter(ServletRequest sRequest, ServletResponse sResponse,
- FilterChain filterChain) throws IOException, ServletException {
- HttpServletRequest request = (HttpServletRequest) sRequest;
- HttpServletResponse response = (HttpServletResponse) sResponse;
- HttpSession session = request.getSession();
-
-
- if (session.getAttribute(UserAction.CURRENT_USER) == null) {
- response.sendRedirect(redirectURl);
- }
-
- else {
- User user = (User) session.getAttribute(UserAction.CURRENT_USER);
- try {
-
- if ("0".equals(allowRole) || user.hasPower(allowRole)) {
- filterChain.doFilter(sRequest, sResponse);
- } else {
-
- response.sendRedirect(redirectURl);
- }
- } catch (Throwable e) {
- LOG.error("權限過濾時候出現錯誤", e);
- throw new RuntimeException("權限過濾時候出現錯誤", e);
- }
- }
- }
-
- public void destroy() {
- }
-
- }
在web.xml中配置 要過濾的頁面和能進入當前頁面的角色
xml 代碼
-
- <filter>
- <filter-name>UserAdminfilter-name>
-
- <filter-class>com.emap.web.FilterServletfilter-class>
-
- <init-param>
-
- <param-name>allowRoleparam-name>
- <param-value>1param-value>
- init-param>
- filter>
- <filter-mapping>
- <filter-name>UserAdminfilter-name>
- <url-pattern>/jsp/security/*url-pattern>
- filter-mapping>
上面配置的意思是說,當用戶進入/jsp/security文件夾下的頁面的時候,程序會進入FilterServlet 里的doFilter方法里,進行權限判斷。
其他的頁面權限控制:
1.你可以在filter里判斷用戶是否登錄,然后需要特殊權限能訪問的頁面,在頁面里進行判斷。
2.推薦使用開源框架ACEGI來進行權限控制
|