01: /* ZkAccessDeniedHandler.java
02:
03: {{IS_NOTE
04: Purpose:
05:
06: Description:
07:
08: History:
09: Thu Dec 21 16:45:26 2006, Created by Henri
10: }}IS_NOTE
11:
12: Copyright (C) 2006 Potix Corporation. All Rights Reserved.
13:
14: {{IS_RIGHT
15: }}IS_RIGHT
16: */
17: package org.zkoss.zkplus.acegi;
18:
19: import org.zkoss.zk.ui.Component;
20: import org.zkoss.zk.ui.event.Event;
21: import org.zkoss.zk.ui.event.Events;
22: import org.zkoss.zk.ui.event.EventListener;
23:
24: import org.acegisecurity.ui.AccessDeniedHandler;
25: import org.acegisecurity.ui.AccessDeniedHandlerImpl;
26: import org.acegisecurity.AccessDeniedException;
27:
28: import java.io.IOException;
29:
30: import javax.servlet.ServletException;
31: import javax.servlet.ServletRequest;
32: import javax.servlet.ServletResponse;
33: import javax.servlet.http.HttpServletRequest;
34: import javax.servlet.http.HttpServletResponse;
35:
36: /**
37: * Used by ExceptionTranslationFilter to handle an
38: * <code>AccessDeniedException</code>. This handler will popup the specified error page so it
39: * must be a Window that can be doModel.
40: *
41: * @author Henri
42: */
43: public class ZkAccessDeniedHandler implements AccessDeniedHandler {
44: private static final String ON_ACCESSDENIED = "onAccessDenied";
45: private String _errorPage;
46:
47: public void setErrorPage(String url) {
48: _errorPage = url;
49: }
50:
51: public String getErrorPage() {
52: return _errorPage;
53: }
54:
55: public void handle(ServletRequest request,
56: ServletResponse response,
57: AccessDeniedException accessDeniedException)
58: throws IOException, ServletException {
59:
60: // Put exception into request scope (perhaps of use to a view)
61: ((HttpServletRequest) request)
62: .setAttribute(
63: AccessDeniedHandlerImpl.ACEGI_SECURITY_ACCESS_DENIED_EXCEPTION_KEY,
64: accessDeniedException);
65:
66: final Component comp = (Component) request
67: .getAttribute(ZkEventExceptionFilter.COMPONENT);
68: if (!comp.isListenerAvailable(ON_ACCESSDENIED, true)) {
69: final EventListener listener = new ShowWindowEventListener();
70: comp.setAttribute(ON_ACCESSDENIED, listener);
71: comp.addEventListener(ON_ACCESSDENIED, listener);
72: }
73: final String url = getErrorPage();
74: Events.postEvent(new Event(ON_ACCESSDENIED, comp,
75: url != null ? url : "~./accessDenied.zul"));
76: }
77: }
|