X Tutup
Skip to content

Commit 222ee9e

Browse files
committed
Merged changes for SESPRINGPYTHONPY-81 to trunk. All tests passed, and PetClinic now works with full security in CherryPy 3.1
git-svn-id: https://src.springframework.org/svn/se-springpython-py/trunk/springpython@378 ce8fead1-4192-4296-8608-a705134b927f
1 parent af1c75e commit 222ee9e

File tree

11 files changed

+317
-224
lines changed

11 files changed

+317
-224
lines changed

samples/petclinic/cherrypy/noxml.py

Lines changed: 40 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@
3333
from springpython.security.vote import RoleVoter
3434
from springpython.security.web import AuthenticationProcessingFilter
3535
from springpython.security.web import AuthenticationProcessingFilterEntryPoint
36-
from springpython.security.web import CherryPySessionStrategy
36+
from springpython.security.web import CP3SessionStrategy
3737
from springpython.security.web import ExceptionTranslationFilter
38-
from springpython.security.web import FilterChainProxy
38+
from springpython.security.web import CP3FilterChainProxy
3939
from springpython.security.web import FilterSecurityInterceptor
4040
from springpython.security.web import HttpSessionContextIntegrationFilter
4141
from springpython.security.web import MiddlewareFilter
42-
from springpython.security.web import RedirectStrategy
42+
from springpython.security.web import CP3RedirectStrategy
4343
from springpython.security.web import SimpleAccessDeniedHandler
4444

4545
class PetClinicClientAndServer(PythonConfig):
@@ -62,11 +62,18 @@ def connectionFactory(self):
6262

6363
@Object
6464
def controller(self):
65-
return controller.PetClinicController(self.connectionFactory())
65+
return controller.PetClinicController(self.connectionFactory())
6666

6767
@Object
6868
def root(self):
69-
return view.PetClinicView(self.controller())
69+
form = view.PetClinicView(controller = self.controller())
70+
form.filter = self.authenticationProcessingFilter()
71+
form.hashedUserDetailsServiceList = [self.md5UserDetailsService(),
72+
self.shaUserDetailsService()]
73+
form.authenticationManager = self.authenticationManager()
74+
form.redirectStrategy = self.redirectStrategy()
75+
form.httpContextFilter = self.httpContextFilter()
76+
return form
7077

7178
@Object
7279
def userDetailsService(self):
@@ -164,11 +171,11 @@ def accessDecisionManager(self):
164171

165172
@Object
166173
def cherrypySessionStrategy(self):
167-
return CherryPySessionStrategy()
174+
return CP3SessionStrategy()
168175

169176
@Object
170177
def redirectStrategy(self):
171-
return RedirectStrategy()
178+
return CP3RedirectStrategy()
172179

173180
@Object
174181
def httpContextFilter(self):
@@ -187,7 +194,7 @@ def authenticationProcessingFilter(self):
187194
def filterSecurityInterceptor(self):
188195
filter = FilterSecurityInterceptor()
189196
filter.auth_manager = self.authenticationManager()
190-
filter.access_decision_manager = self.accessDecisionManager()
197+
filter.access_decision_mgr = self.accessDecisionManager()
191198
filter.sessionStrategy = self.cherrypySessionStrategy()
192199
filter.obj_def_source = [
193200
("/vets.*", ["VET_ANY"]),
@@ -219,28 +226,17 @@ def exceptionTranslationFilter(self):
219226

220227
@Object
221228
def filterChainProxy(self):
222-
return FilterChainProxy(filterInvocationDefinitionSource =
229+
return CP3FilterChainProxy(filterInvocationDefinitionSource =
223230
[
224231
("/images.*", []),
225232
("/html.*", []),
226-
("/login.*", [self.httpContextFilter()]),
227-
("/.*", [self.httpContextFilter(),
228-
self.exceptionTranslationFilter(),
229-
self.authenticationProcessingFilter(),
230-
self.filterSecurityInterceptor()])
233+
("/login.*", ["httpContextFilter"]),
234+
("/.*", ["httpContextFilter",
235+
"exceptionTranslationFilter",
236+
"authenticationProcessingFilter",
237+
"filterSecurityInterceptor"])
231238
])
232239

233-
@Object
234-
def loginForm(self):
235-
loginForm = view.CherryPyAuthenticationForm()
236-
loginForm.filter = self.authenticationProcessingFilter()
237-
loginForm.controller = self.controller()
238-
loginForm.hashedUserDetailsServiceList = [self.md5UserDetailsService(),
239-
self.shaUserDetailsService()]
240-
loginForm.authenticationManager = self.authenticationManager()
241-
loginForm.redirectStrategy = self.redirectStrategy()
242-
return loginForm
243-
244240
class PetClinicServerOnly(PythonConfig):
245241
"""
246242
This is a non-XML, decorator based IoC container definition which includes
@@ -308,7 +304,16 @@ def view(self):
308304

309305
@Object
310306
def root(self):
311-
return view.PetClinicView(self.controller())
307+
form = view.PetClinicView(self.controller())
308+
form.filter = self.authenticationProcessingFilter()
309+
form.controller = self.controller()
310+
form.hashedUserDetailsServiceList = []
311+
form.hashedUserDetailsServiceList.append(self.md5UserDetailsService())
312+
form.hashedUserDetailsServiceList.append(self.shaUserDetailsService())
313+
form.authenticationManager = self.authenticationManager()
314+
form.redirectStrategy = self.redirectStrategy()
315+
form.httpContextFilter = self.httpContextFilter()
316+
return form
312317

313318
@Object
314319
def userDetailsService(self):
@@ -408,11 +413,11 @@ def accessDecisionManager(self):
408413

409414
@Object
410415
def cherrypySessionStrategy(self):
411-
return CherryPySessionStrategy()
416+
return CP3SessionStrategy()
412417

413418
@Object
414419
def redirectStrategy(self):
415-
return RedirectStrategy()
420+
return CP3RedirectStrategy()
416421

417422
@Object
418423
def httpContextFilter(self):
@@ -432,7 +437,7 @@ def filterSecurityInterceptor(self):
432437
filter = FilterSecurityInterceptor()
433438
filter.validate_config_attributes = False
434439
filter.auth_manager = self.authenticationManager()
435-
filter.access_decision_manager = self.accessDecisionManager()
440+
filter.access_decision_mgr = self.accessDecisionManager()
436441
filter.sessionStrategy = self.cherrypySessionStrategy()
437442
filter.obj_def_source = [("/vets.*", ["VET_ANY"]),
438443
("/editOwner.*", ["VET_ANY", "OWNER"]),
@@ -462,25 +467,14 @@ def exceptionTranslationFilter(self):
462467

463468
@Object
464469
def filterChainProxy(self):
465-
return FilterChainProxy(filterInvocationDefinitionSource =
470+
return CP3FilterChainProxy(filterInvocationDefinitionSource =
466471
[
467472
("/images.*", []),
468473
("/html.*", []),
469-
("/login.*", [self.httpContextFilter()]),
470-
("/.*", [self.httpContextFilter(),
471-
self.exceptionTranslationFilter(),
472-
self.authenticationProcessingFilter(),
473-
self.filterSecurityInterceptor()])
474+
("/login.*", ["httpContextFilter"]),
475+
("/.*", ["httpContextFilter",
476+
"exceptionTranslationFilter",
477+
"authenticationProcessingFilter",
478+
"filterSecurityInterceptor"])
474479
])
475480

476-
@Object
477-
def loginForm(self):
478-
loginForm = view.CherryPyAuthenticationForm()
479-
loginForm.filter = self.authenticationProcessingFilter()
480-
loginForm.controller = self.controller()
481-
loginForm.hashedUserDetailsServiceList = []
482-
loginForm.hashedUserDetailsServiceList.append(self.md5UserDetailsService())
483-
loginForm.hashedUserDetailsServiceList.append(self.shaUserDetailsService())
484-
loginForm.authenticationManager = self.authenticationManager()
485-
loginForm.redirectStrategy = self.redirectStrategy()
486-
return loginForm

samples/petclinic/cherrypy/petclinic-client.py

Lines changed: 8 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -38,69 +38,21 @@
3838
logger.addHandler(ch)
3939

4040
applicationContext = ApplicationContext(noxml.PetClinicClientOnly())
41+
applicationContext.get_object("filterChainProxy")
4142

4243
SecurityContextHolder.setStrategy(SecurityContextHolder.MODE_GLOBAL)
4344
SecurityContextHolder.getContext()
4445

45-
def filter_chainer(filters):
46-
for f in filters:
47-
f.run()
48-
49-
def make_session_filter():
50-
contextSessionFilter = ContextSessionFilter()
51-
cherrypy.tools.sessionFilter = cherrypy.Tool('before_handler', filter_chainer, priority=74)
52-
return contextSessionFilter
53-
54-
def make_authentication_filter(manager):
55-
authFilter = AuthenticationFilter(authManager=manager)
56-
cherrypy.tools.authFilter = cherrypy.Tool('before_handler', filter_chainer, priority=75)
57-
return authFilter
58-
59-
def make_security_filter(manager):
60-
securityFilter = SecurityFilter(authManager=manager, redirectPath="/login")
61-
cherrypy.tools.securityFilter = cherrypy.Tool('before_handler', filter_chainer, priority=75)
62-
return securityFilter
63-
64-
manager = applicationContext.get_object("authenticationManager")
65-
accessDecisionManager = applicationContext.get_object("accessDecisionManager")
66-
objectDefinitionSource = [
67-
("/vets.*", ["VET_ANY"]),
68-
("/editOwner.*", ["VET_ANY", "OWNER"]),
69-
("/.*", ["VET_ANY", "CUSTOMER_ANY"])
70-
]
71-
72-
session_filter = make_session_filter()
73-
auth_filter = make_authentication_filter(manager)
74-
security_filter = make_security_filter(manager)
75-
76-
conf = {'/': {'tools.sessions.on': True,
77-
'tools.sessionFilter.on': True,
78-
'tools.sessionFilter.filters': [session_filter, security_filter],
79-
"tools.staticdir.root": os.getcwd()},
80-
"/images": {"tools.staticdir.on": True,
81-
"tools.staticdir.dir": "images"},
82-
"/html": {"tools.staticdir.on": True,
83-
"tools.staticdir.dir": "html"}
46+
conf = {'/': {"tools.staticdir.root": os.getcwd(),
47+
"tools.sessions.on": True,
48+
"tools.filterChainProxy.on": True},
49+
"/images": {"tools.staticdir.on": True,
50+
"tools.staticdir.dir": "images"},
51+
"/html": {"tools.staticdir.on": True,
52+
"tools.staticdir.dir": "html"}
8453
}
85-
login_conf = {
86-
'/': {
87-
'tools.sessions.on': True,
88-
'tools.sessionFilter.on': True,
89-
'tools.sessionFilter.filters': [],
90-
"tools.staticdir.root": os.getcwd()
91-
},
92-
"/images": {
93-
"tools.staticdir.on": True,
94-
"tools.staticdir.dir": "images"
95-
},
96-
"/html": {
97-
"tools.staticdir.on": True,
98-
"tools.staticdir.dir": "html"
99-
}
100-
}
10154

10255
cherrypy.tree.mount(applicationContext.get_object(name = "root"), '/', config=conf)
103-
cherrypy.tree.mount(applicationContext.get_object(name = "loginForm"), '/login', config=login_conf)
10456

10557
cherrypy.engine.start()
10658
cherrypy.engine.block()

samples/petclinic/cherrypy/petclinic.py

Lines changed: 8 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -40,69 +40,21 @@
4040
logger.addHandler(ch)
4141

4242
applicationContext = ApplicationContext(noxml.PetClinicClientAndServer())
43+
applicationContext.get_object("filterChainProxy")
4344

4445
SecurityContextHolder.setStrategy(SecurityContextHolder.MODE_GLOBAL)
4546
SecurityContextHolder.getContext()
4647

47-
def filter_chainer(filters):
48-
for f in filters:
49-
f.run()
50-
51-
def make_session_filter():
52-
contextSessionFilter = ContextSessionFilter()
53-
cherrypy.tools.sessionFilter = cherrypy.Tool('before_handler', filter_chainer, priority=74)
54-
return contextSessionFilter
55-
56-
def make_authentication_filter(manager):
57-
authFilter = AuthenticationFilter(authManager=manager)
58-
cherrypy.tools.authFilter = cherrypy.Tool('before_handler', filter_chainer, priority=75)
59-
return authFilter
60-
61-
def make_security_filter(manager):
62-
securityFilter = SecurityFilter(authManager=manager, redirectPath="/login")
63-
cherrypy.tools.securityFilter = cherrypy.Tool('before_handler', filter_chainer, priority=75)
64-
return securityFilter
65-
66-
manager = applicationContext.get_object("authenticationManager")
67-
accessDecisionManager = applicationContext.get_object("accessDecisionManager")
68-
objectDefinitionSource = [
69-
("/vets.*", ["VET_ANY"]),
70-
("/editOwner.*", ["VET_ANY", "OWNER"]),
71-
("/.*", ["VET_ANY", "CUSTOMER_ANY"])
72-
]
73-
74-
session_filter = make_session_filter()
75-
auth_filter = make_authentication_filter(manager)
76-
security_filter = make_security_filter(manager)
77-
78-
conf = {'/': {'tools.sessions.on': True,
79-
'tools.sessionFilter.on': True,
80-
'tools.sessionFilter.filters': [session_filter, security_filter],
81-
"tools.staticdir.root": os.getcwd()},
82-
"/images": {"tools.staticdir.on": True,
83-
"tools.staticdir.dir": "images"},
84-
"/html": {"tools.staticdir.on": True,
85-
"tools.staticdir.dir": "html"}
48+
conf = {'/': {"tools.staticdir.root": os.getcwd(),
49+
"tools.sessions.on": True,
50+
"tools.filterChainProxy.on": True},
51+
"/images": {"tools.staticdir.on": True,
52+
"tools.staticdir.dir": "images"},
53+
"/html": {"tools.staticdir.on": True,
54+
"tools.staticdir.dir": "html"}
8655
}
87-
login_conf = {
88-
'/': {
89-
'tools.sessions.on': True,
90-
'tools.sessionFilter.on': True,
91-
'tools.sessionFilter.filters': [],
92-
"tools.staticdir.root": os.getcwd()
93-
},
94-
"/images": {
95-
"tools.staticdir.on": True,
96-
"tools.staticdir.dir": "images"
97-
},
98-
"/html": {
99-
"tools.staticdir.on": True,
100-
"tools.staticdir.dir": "html"
101-
}
102-
}
10356

10457
cherrypy.tree.mount(applicationContext.get_object(name = "root"), '/', config=conf)
105-
cherrypy.tree.mount(applicationContext.get_object(name = "loginForm"), '/login', config=login_conf)
10658

10759
cherrypy.engine.start()
10860
cherrypy.engine.block()

0 commit comments

Comments
 (0)
X Tutup