2012-08-20 23 views
9

Tôi có theo phương pháp trong Spring MVC và sử dụng An Xuân:Làm cách nào để mô phỏng thẻ @PreAutorize trong thử nghiệm tích hợp?

@PreAuthorize("#phoneNumber == authentication.name") 
@RequestMapping(value = "/{phoneNumber}/start", method = RequestMethod.POST) 
public ModelAndView startUpgrading(@PathVariable("phoneNumber") String phoneNumber, 
     .... 
} 

tôi quản lý để mô phỏng xác thực một cái gì đó như thế này:

public Authentication tryToAuthenticate(String accountName, String password) { 
     UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(accountName, password); 
    return authenticationManager.authenticate(token); 
} 

Nhưng tôi không biết làm thế nào để thiết lập sự cho phép với @ PreAutorize.

Làm cách nào để tôi có thể thiết lập ngữ cảnh thử nghiệm của mình một cách chính xác để tôi không bị truy cập bị từ chối?

org.springframework.security.access.AccessDeniedException: Access is denied 
at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:83) 
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:205) 

Trả lời

1

Các chú thích (@PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter) có hỗ trợ biểu hiện thuộc tính để cho phép trước & kiểm tra ủy quyền sau gọi được kích hoạt thông qua các yếu tố không gian tên toàn cầu-method-quyền.

Bạn cần thêm mã sau vào tệp application-servlet.xml hoặc tệp xml bảo mật của mình.

<security:global-method-security pre-post-annotations="enabled" > 
    <security:expression-handler ref="expressionHandler"/> 
</security:global-method-security> 

<beans:bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler"> 
    <beans:property name="permissionEvaluator" ref="permissionEvaluator"/> 
</beans:bean> 

Kiểm traspring-testcontext-frameworkthis post trả lời câu hỏi rất giống như của bạn.

+0

Xin lỗi hồi đáp muộn, điều này đã làm say mê! 50 điểm thưởng cho bạn. Cảm ơn bạn đã giúp đỡ ! –

+0

@ThomasVervik ... Tôi rất vui vì câu trả lời của tôi đã giúp bạn. :) –

0

Có vẻ như bạn muốn khai báo phiên bản giả của bean thực hiện Xác thực. Bạn có thể cần một context.xml thử nghiệm để khai báo nó.

+0

Tôi đã có ngữ cảnh văn bản xml, điều đó không có vấn đề gì. Bất kỳ ý tưởng mà đậu chịu trách nhiệm cho Autorization? –

+0

Bạn không chỉ định nó trong cấu hình bảo mật Spring của mình? – TrueDub

0

Có thể kiểm tra this bài đăng cũ và official documentation 16.3 Phương thức bảo mật biểu thức cho cấu hình xml.

Tôi nghĩ rằng bạn cần phải khai báo trên xml của bạn:

Ngoài ra phương pháp của bạn để xác thực thẻ có thể là một hasPermisions(). Kiểm tra 16.3.2 Built-In Expressions

Các vấn đề liên quan