File Source: privateblogsecurityinterceptor.java
/*
P/P * Method: net.sourceforge.pebble.security.PrivateBlogSecurityInterceptor__static_init
*/
1 /*
2 * Copyright (c) 2003-2006, Simon Brown
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * - Neither the name of Pebble nor the names of its contributors may
17 * be used to endorse or promote products derived from this software
18 * without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32 package net.sourceforge.pebble.security;
33
34 import org.acegisecurity.intercept.AbstractSecurityInterceptor;
35 import org.acegisecurity.intercept.InterceptorStatusToken;
36 import org.acegisecurity.intercept.ObjectDefinitionSource;
37 import org.acegisecurity.intercept.web.FilterInvocation;
38 import org.acegisecurity.intercept.web.FilterInvocationDefinitionSource;
39
40 import javax.servlet.*;
41 import java.io.IOException;
42
43 /**
44 * Specialised FilterSecurityInterceptor that returns its own type of
45 * ObjectDefinitionSource. This is acopy-paste job from Acegi's
46 * FilterSecurityInterceptor. :-(
47 *
48 * @author Simon Brown
49 */
/*
P/P * Method: void net.sourceforge.pebble.security.PrivateBlogSecurityInterceptor()
*
* Postconditions:
* this.observeOncePerRequest == 1
*/
50 public class PrivateBlogSecurityInterceptor extends AbstractSecurityInterceptor implements Filter {
51
52 private static final String FILTER_APPLIED = "__acegi_privateBlogSecurityInterceptor_filterApplied";
53
54 //~ Instance fields ================================================================================================
55
56 private boolean observeOncePerRequest = true;
57
58 //~ Methods ========================================================================================================
59
60 /**
61 * Not used (we rely on IoC container lifecycle services instead)
62 */
/*
P/P * Method: void destroy()
*/
63 public void destroy() {}
64
65 /**
66 * Method that is actually called by the filter chain. Simply delegates to the {@link
67 * #invoke(FilterInvocation)} method.
68 *
69 * @param request the servlet request
70 * @param response the servlet response
71 * @param chain the filter chain
72 *
73 * @throws IOException if the filter chain fails
74 * @throws ServletException if the filter chain fails
75 */
/*
P/P * Method: void doFilter(ServletRequest, ServletResponse, FilterChain)
*
* Preconditions:
* (soft) init'ed(this.observeOncePerRequest)
*/
76 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
77 throws IOException, ServletException {
78 FilterInvocation fi = new FilterInvocation(request, response, chain);
79 invoke(fi);
80 }
81
/*
P/P * Method: Class getSecureObjectClass()
*/
82 public Class getSecureObjectClass() {
83 return FilterInvocation.class;
84 }
85
86 /**
87 * Not used (we rely on IoC container lifecycle services instead)
88 *
89 * @param arg0 ignored
90 *
91 * @throws ServletException never thrown
92 */
/*
P/P * Method: void init(FilterConfig)
*/
93 public void init(FilterConfig arg0) throws ServletException {}
94
/*
P/P * Method: void invoke(FilterInvocation)
*
* Preconditions:
* fi != null
* (soft) init'ed(this.observeOncePerRequest)
*
* Presumptions:
* init'ed(java.lang.Boolean.TRUE)
* org.acegisecurity.intercept.web.FilterInvocation:getChain(...)@100 != null
* org.acegisecurity.intercept.web.FilterInvocation:getChain(...)@110 != null
* org.acegisecurity.intercept.web.FilterInvocation:getRequest(...)@104 != null
* org.acegisecurity.intercept.web.FilterInvocation:getRequest(...)@96 != null
*
* Test Vectors:
* this.observeOncePerRequest: {0}, {1}
* javax.servlet.ServletRequest:getAttribute(...)@96: Addr_Set{null}, Inverse{null}
* org.acegisecurity.intercept.web.FilterInvocation:getRequest(...)@103: Addr_Set{null}, Inverse{null}
* org.acegisecurity.intercept.web.FilterInvocation:getRequest(...)@96: Addr_Set{null}, Inverse{null}
*/
95 public void invoke(FilterInvocation fi) throws IOException, ServletException {
96 if ((fi.getRequest() != null) && (fi.getRequest().getAttribute(FILTER_APPLIED) != null)
97 && observeOncePerRequest) {
98 // filter already applied to this request and user wants us to observce
99 // once-per-request handling, so don't re-do security checking
100 fi.getChain().doFilter(fi.getRequest(), fi.getResponse());
101 } else {
102 // first time this request being called, so perform security checking
103 if (fi.getRequest() != null) {
104 fi.getRequest().setAttribute(FILTER_APPLIED, Boolean.TRUE);
105 }
106
107 InterceptorStatusToken token = super.beforeInvocation(fi);
108
109 try {
110 fi.getChain().doFilter(fi.getRequest(), fi.getResponse());
111 } finally {
112 super.afterInvocation(token, null);
113 }
114 }
115 }
116
117 /**
118 * Indicates whether once-per-request handling will be observed. By default this is <code>true</code>,
119 * meaning the <code>FilterSecurityInterceptor</code> will only execute once-per-request. Sometimes users may wish
120 * it to execute more than once per request, such as when JSP forwards are being used and filter security is
121 * desired on each included fragment of the HTTP request.
122 *
123 * @return <code>true</code> (the default) if once-per-request is honoured, otherwise <code>false</code> if
124 * <code>FilterSecurityInterceptor</code> will enforce authorizations for each and every fragment of the
125 * HTTP request.
126 */
/*
P/P * Method: bool isObserveOncePerRequest()
*
* Preconditions:
* init'ed(this.observeOncePerRequest)
*
* Postconditions:
* return_value == this.observeOncePerRequest
* init'ed(return_value)
*/
127 public boolean isObserveOncePerRequest() {
128 return observeOncePerRequest;
129 }
130
/*
P/P * Method: void setObserveOncePerRequest(bool)
*
* Postconditions:
* this.observeOncePerRequest == observeOncePerRequest
* init'ed(this.observeOncePerRequest)
*/
131 public void setObserveOncePerRequest(boolean observeOncePerRequest) {
132 this.observeOncePerRequest = observeOncePerRequest;
133 }
134
/*
P/P * Method: FilterInvocationDefinitionSource getObjectDefinitionSource()
*
* Postconditions:
* return_value == &new PrivateBlogFilterInvocationDefinitionSource(getObjectDefinitionSource#1)
* new PrivateBlogFilterInvocationDefinitionSource(getObjectDefinitionSource#1) num objects == 1
*/
135 public FilterInvocationDefinitionSource getObjectDefinitionSource() {
136 return new PrivateBlogFilterInvocationDefinitionSource();
137 }
138
/*
P/P * Method: ObjectDefinitionSource obtainObjectDefinitionSource()
*
* Postconditions:
* return_value == &new PrivateBlogFilterInvocationDefinitionSource(obtainObjectDefinitionSource#1)
* new PrivateBlogFilterInvocationDefinitionSource(obtainObjectDefinitionSource#1) num objects == 1
*/
139 public ObjectDefinitionSource obtainObjectDefinitionSource() {
140 return new PrivateBlogFilterInvocationDefinitionSource();
141 }
142
143 }
SofCheck Inspector Build Version : 2.22510
| privateblogsecurityinterceptor.java |
2010-Jun-25 19:40:32 |
| privateblogsecurityinterceptor.class |
2010-Jul-19 20:23:38 |