source: main/branches/2.1/src/main/webapps/ibisph-view/WEB-INF/config/spring/security.xml @ 3548

Last change on this file since 3548 was 3548, checked in by Garth Braithwaite, 10 years ago

view webapp - secure configs and xslt code.

File size: 14.0 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2
3<!--
4        Bean definitions for securing the IBIS-PH View application.  Note that this
5        security is modeled like the Admin app's security in that it uses this core
6        "security.xml" definition file along with specific authentication bean
7        definition files.  However, unlike the admin app which has its specific
8        authentication beans named the same/generically (which provides a pluggable
9        mechanism) the view app uses explicitly defined authentication bean names.
10        This is needed so that different authentication mechansims may be combined
11        (which the admin app does not need). 
12
13        This file is setup to provide a pre auth single signon first and then the
14        open XML user is not pre authed.  It also handles remote publish requests.
15
16        The view app's security needs can be extremely diverse - anywhere from not
17        needed at all (in the case of direct publishing, no saved query defs, and
18        no secure datasets) to multiple authentication/authorization mechanisms
19        (so everything with single signon for secure URLs with db or XML based
20        user info for saved queries). 
21       
22        The view app's security is still designed to be somewhat modular but
23        because of the diverse nature and complexity requires the adopter to more
24        actively configure and maintain this file's filter mapping, authentication
25        manager and authorization manager configurations, as well as the web.xml
26        filter mappings.
27
28        The default security bean definitions provide for the most common use caess
29        of secure queries, open XML based user defined saved query definitions, and
30        remote peer to peer publishing.  The secure and saved query definitions
31        will first try to authenticate using header pre auth single signon followed
32        by XML based user info.  This file also contains the peer to peer publishing
33        security definitions which may not even be used if the admin app is setup to
34        do direct publishing. 
35
36        Protecting a URL involves:
37        - Setting the filter mapping in the web.xml.
38        - Specifying in the web.xml all the needed Spring security bean files
39          being used.
40        - Setting the URL to filter list mapping in the proxy filter.
41        - Setting the authentication manager, authorization manager, and role
42          voters as needed.  This includes setting the Authorization.InterceptorFilter
43          URL pattern setc. 
44
45        NOTES:
46        - See the IBIS-PH Admin app's security.xml file for more information about
47          security bean definitions.
48        - HTTP/HTTPS can be implemented as needed.  See the comments withing the
49          https.xml spring bean application context XML file for more info on
50          how to use.  Note that the HTTPS channel processing is independent of
51          security so that it can be used as needed within an application.
52-->
53
54<beans default-lazy-init="false" default-autowire="no"
55        xmlns="http://www.springframework.org/schema/beans"
56        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
57        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
58>
59
60        <bean id="Security.FilterChainProxy" class="org.springframework.security.web.FilterChainProxy">
61                <constructor-arg>
62                        <list>
63                                <bean class="org.ibisph.web.filter.AntPatternSecurityFilterChain">
64                                        <constructor-arg>
65                                                <list>
66                                                        <value>/user/authenticate</value>
67                                                        <value>/user/logout</value>
68                                                        <value>/user/profile/*</value>
69                                                        <value>/user/MyQueries.html</value>
70                                                        <value>/query/definition/**</value>
71                                                        <value>/query/criteria/**</value>
72                                                </list>
73                                        </constructor-arg>
74                                        <constructor-arg>
75                                                <list>
76<!--
77<ref bean="Security.HeaderStuffer.Filter"/>
78-->
79                                                        <ref bean="Security.SecurityContextPersistenceFilter"/>
80                                                        <ref bean="Security.LogoutFilter"/>
81                                                        <ref bean="Security.Authentication.Header.ProcessingFilter"/>
82                                                        <ref bean="Security.Authentication.Page.ProcessingFilter"/>
83                                                        <ref bean="Security.ExceptionTranslationFilter"/>
84                                                        <ref bean="Security.Authorization.InterceptorFilter"/>
85                                                </list>
86                                        </constructor-arg>
87                                </bean>
88
89                                <bean class="org.ibisph.web.filter.AntPatternSecurityFilterChain">
90                                        <constructor-arg>
91                                                <list>
92                                                        <value>/secure/**</value>
93                                                </list>
94                                        </constructor-arg>
95                                        <constructor-arg>
96                                                <list>
97<ref bean="Security.HeaderStuffer.Filter"/>
98                                                        <ref bean="Security.SecurityContextPersistenceFilter"/>
99                                                        <ref bean="Security.LogoutFilter"/>
100                                                        <ref bean="Security.Authentication.Header.ProcessingFilter"/>
101                                                        <ref bean="Security.ExceptionTranslationFilter"/>
102                                                        <ref bean="Security.Authorization.InterceptorFilter"/>
103                                                </list>
104                                        </constructor-arg>
105                                </bean>
106
107                                <bean class="org.ibisph.web.filter.AntPatternSecurityFilterChain">
108                                        <constructor-arg>
109                                                <list>
110                                                        <value>/publish/**</value>
111                                                        <value>/unpublish/**</value>
112                                                </list>
113                                        </constructor-arg>
114                                        <constructor-arg>
115                                                <list>
116                                                        <ref bean="Security.PublishRequest.AllowRequestIPAddressFilter"/>
117                                                </list>
118                                        </constructor-arg>
119                                </bean>
120                        </list>
121                </constructor-arg>
122        </bean>                         
123
124
125
126        <bean id="Security.PublishRequest.AllowRequestIPAddressFilter" class="org.ibisph.web.filter.CheckAllowedRequesterIPAddressFilter">
127                <description>
128                        Filter that enforces that the request is being made from a specific IP
129                        address or domain segment address.  This is useful to block non admin
130                        based client the ability to send a publish request to the view app.
131                        This filter verifies that the request is coming from the Admin
132                        application server's address.  If not, then the HTTP Unauthorized
133                        Access (401) is returned by the filter and the publish request
134                        does not go through.
135
136                        IMPORTANT NOTE: For this to work ALL publish type requests need
137                        to have a URL mapping that is caught by this filter (see filter
138                        mapping).  The ACEGI security can also be deployed but as of
139                        1/2006, this is the only security need, so it done as a simple
140                        filter without having to configure and deal with ACEGI.  Tomcat
141                        also provides a similar filter.
142                </description>
143                <property name="matchPartialAddress" ref="Common.AdminApp.PublishRequest.MatchPartialIPAddress"/>
144                <property name="IPAddressList">
145                        <description>
146                                IP address segment (left to right significance) which is used to
147                                identify/allow publishing requests to come from.  Localhost should
148                                be "127.0.0.1", If null/blank then any machine is allowed to make
149                                a publishing request.  A value of "254.67" means that any address
150                                that starts with 254.67 is valid (e.g. 254.67.*.* or 254.67.255.255
151                                in networking terms).
152                        </description>
153                        <list>
154                                <value>127.0.0.1</value>
155                                <ref bean="Common.AdminApp.IPAddress"/>
156                        </list>
157                </property>
158        </bean>
159
160
161
162        <!-- ======================================================= S E S S I O N -->
163        <bean id="Security.SecurityContextPersistenceFilter" class="org.springframework.security.web.context.SecurityContextPersistenceFilter">
164                <constructor-arg>
165                        <bean class="org.springframework.security.web.context.HttpSessionSecurityContextRepository"/>
166                </constructor-arg>
167        </bean>
168        <bean id="Security.ConcurrentSessionFilter" class="org.springframework.security.web.session.ConcurrentSessionFilter">
169                <property name="sessionRegistry">
170                        <bean class="org.springframework.security.core.session.SessionRegistryImpl"/>
171                </property>
172        </bean>
173
174
175        <bean id="Security.LogoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
176                <constructor-arg value="/"/> <!-- URL redirected to after logout -->
177                <constructor-arg>
178                        <list>
179                                <bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler"/>
180                        </list>
181                </constructor-arg>
182                <property name="filterProcessesUrl" value="/user/logout"/>
183        </bean>
184
185
186        <bean id="Security.Integration.LoggerListener" class="org.springframework.security.authentication.event.LoggerListener"/>
187
188
189
190        <!-- =========================================== A U T H E N T I C A T I O N -->
191        <bean id="Security.Authentication.ProcessingFilterEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
192                <property name="loginFormUrl" value="/user/Login.html"/>
193                <property name="useForward" value="false"/>
194                <property name="forceHttps" value="false"/>
195        </bean>
196
197        <bean id="Security.ExceptionTranslationFilter" class="org.springframework.security.web.access.ExceptionTranslationFilter">
198                <property name="authenticationEntryPoint" ref="Security.Authentication.ProcessingFilterEntryPoint"/>
199                <property name="accessDeniedHandler">
200                        <bean class="org.springframework.security.web.access.AccessDeniedHandlerImpl">
201                                <property name="errorPage" value="/WEB-INF/jsp/access_denied.jsp"/>
202                        </bean>
203                </property>
204        </bean>
205
206        <bean id="Security.Authentication.UserLog.Service" class="org.ibisph.user.service.SLF4JUserLog"/>
207
208        <bean id="Security.Authentication.ProviderManager" class="org.springframework.security.authentication.ProviderManager">
209                <property name="providers">
210                        <list>
211                                <ref local="Security-Pre.Authentication.PreAuthenticatedAuthenticationProvider"/>
212                                <ref local="Security-XML.Authentication.DAOAuthenticationProvider"/>
213<!--
214                                <ref local="Security-DB.Authentication.DAOAuthenticationProvider"/>
215-->
216                        </list>
217                </property>
218        </bean>
219
220
221        <!-- form based login filter -->
222        <bean id="Security.Authentication.Page.ProcessingFilter" class="org.ibisph.user.springsecurity.LogUserAuthenticationProcessingFilter">
223                <property name="filterProcessesUrl"       value="/user/authenticate"/>
224                <property name="usernameParameter"        value="username"/>
225                <property name="passwordParameter"        value="password"/>
226                <property name="authenticationFailureHandler" ref="Security.Authentication.FailedAuthenticationHandler"/>
227
228                <!-- if using DB authentication, might want to use the "Security-DB.Authentication.UserLog.Service". -->
229                <property name="userLogService"           ref="Security.Authentication.UserLog.Service"/>
230                <property name="authenticationManager"    ref="Security.Authentication.ProviderManager"/>
231        </bean>
232
233        <!-- pre auth filter -->
234        <bean id="Security.Authentication.Header.ProcessingFilter" class="org.ibisph.user.springsecurity.CreateUserDetailsAndLogUserPreAuthenticationProcessingFilter">
235                <property name="usernameRequestHeaderKey"     value="email"/>
236                <property name="fullnameRequestHeaderKey"     value="fullname"/>
237                <property name="emailAddressRequestHeaderKey" value="email"/>
238                <property name="convertUsernameToLowerCase"   value="true"/>
239                <property name="authorityRequestHeaderValueRegexDelimiter" value="\^"/>
240                <property name="authorityRequestHeaderName">
241                        <description>
242                                This is a list of HTTP headers to use to retrieve authority
243                                values from the HTTP request header.  The value of the list
244                                specifies the "key" of the HTTP request header param name. 
245                                All non blank HTTP request header values will be added the
246                                user's set of authorities.
247                        </description>
248                        <list>
249                                <value>admin</value>
250                                <value>roles</value>
251                        </list>
252                </property>
253
254                <!-- if using DB authentication, might want to use the "Security-DB.Authentication.UserLog.Service". -->
255                <property name="userLogService"        ref="Security.Authentication.UserLog.Service"/>
256                <property name="authenticationManager" ref="Security.Authentication.ProviderManager"/>
257        </bean>
258
259
260        <bean id="Security.Authentication.FailedAuthenticationHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
261                <property name="defaultFailureUrl" value="/WEB-INF/jsp/access_denied.jsp?message=authentication Failed."/>
262                <property name="useForward" value="true"/>
263        </bean>
264
265
266
267        <!-- ============================================= A U T H O R I Z A T I O N  -->
268        <!-- allows for the IS_AUTHENTICATED_FULLY role voting -->
269        <bean id="Security.Authorization.AuthenticatedVoter" class="org.springframework.security.access.vote.AuthenticatedVoter"/>
270
271        <!-- have to clear the rolePrefix property - defaults to ROLE_ -->
272        <bean id="Security.Authorization.RoleVoter" class="org.springframework.security.access.vote.RoleVoter">
273                <property name="rolePrefix" value=""/>
274        </bean>
275
276
277        <!--
278                "org.springframework.security.access.vote.AffirmativeBased" == all must abstain or grant
279                ConsensusBased - if majority, AffirmativeBased - if any
280
281                                <ref bean="Security.Authorization.RoleVoter"/>
282        -->
283        <bean id="Security.Authorization.AccessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
284                <property name="allowIfAllAbstainDecisions" value="false"/>
285                <property name="decisionVoters">
286                        <list>
287                                <ref bean="Security.Authorization.AuthenticatedVoter"/>
288                        </list>
289                </property>
290        </bean>
291
292
293        <bean id="Security.Authorization.MetadataSource" class="org.springframework.security.web.access.intercept.DefaultFilterInvocationSecurityMetadataSource">
294                <constructor-arg>
295                        <map>
296                                <entry>
297                                        <key><bean class="org.springframework.security.web.util.AntPathRequestMatcher">
298                                                <constructor-arg value="/query/definition/**"/>
299                                        </bean></key>
300                                        <list>
301                                                <bean class="org.springframework.security.access.SecurityConfig">
302                                                        <constructor-arg value="IS_AUTHENTICATED_FULLY"/>
303                                                </bean>
304                                        </list>
305                                </entry>
306                                <entry>
307                                        <key><bean class="org.springframework.security.web.util.AntPathRequestMatcher">
308                                                <constructor-arg value="/user/**"/>
309                                        </bean></key>
310                                        <list>
311                                                <bean class="org.springframework.security.access.SecurityConfig">
312                                                        <constructor-arg value="IS_AUTHENTICATED_FULLY"/>
313                                                </bean>
314                                        </list>
315                                </entry>
316                        </map>
317                </constructor-arg>
318        </bean>
319
320        <bean id="Security.Authorization.InterceptorFilter" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
321                <property name="authenticationManager"  ref="Security.Authentication.ProviderManager"/>
322                <property name="accessDecisionManager"  ref="Security.Authorization.AccessDecisionManager"/>
323                <property name="securityMetadataSource" ref="Security.Authorization.MetadataSource"/>
324        </bean>
325
326</beans>
327
Note: See TracBrowser for help on using the repository browser.