2011-12-01 31 views
7

Tôi muốn xem liệu có thể sử dụng chú thích để loại bỏ nếu người dùng đăng nhập hay không.Bạn có thể sử dụng chú giải Java để đánh giá điều gì đó trong một phương pháp không?

Ví dụ

@AuthRequired 
public String myProtectedArea() { 
    return View("view/protectedArea"); // If user is NOT authenticated, return "view/login" 
} 
+0

Những loại ứng dụng này là? Một ứng dụng web? – Puce

+0

có, mvc webapp –

Trả lời

3

Theo sửa đổi của bạn: Kiểm tra SO bài viết này:

Scanning Java annotations at runtime

tôi vẫn muốn khuyên bạn nên sử dụng Spring Security cho điều này, nó được thử nghiệm và an toàn:

@PreAuthorize("hasRole('ROLE_USER')") 
public String myProtectedArea() { 
    return View("view/protectedArea"); 
} 

Các chú thích sẽ kiểm tra nếu người dùng đăng nhập và có thông tin đăng nhập bắt buộc.

Một cách khác với Xuân An là chặn đứng cuộc mẫu URL bằng cách thiết lập này bên trong một spring.security-settings.xml:

<intercept-url pattern="/view/protectedArea/*" access="hasRole('ROLE_USER')" /> 

tôi khuyên bạn nên sử dụng cả hai để tối đa hóa an ninh.

Trong tệp cài đặt bảo mật, bạn có thể bảo mật xuân nơi chuyển hướng người dùng để đăng nhập. Nếu người dùng đã đăng nhập, bạn có thể chuyển hướng anh ta đến một trang khác:

<form-login login-page="/view/login.xhtml" default-target-url="/view/protectedArea/home.xhtml" 
      authentication-failure-url="/view/login.xhtml" /> 

Đó là một khuôn khổ thử nghiệm và do đó bảo mật và linh hoạt. Tuy nhiên nó đòi hỏi một chút thiết lập nếu bạn muốn nhiều hơn hành vi tiêu chuẩn.

1

Chú thích không kiểm tra nếu người dùng đang đăng nhập hay không - chú thích là siêu dữ liệu trên lớp/phương pháp. Một cái gì đó vẫn phải sử dụng chú thích.

Nội dung nào đó trong mã của bạn kiểm tra xem phương thức có được chú thích bằng @AuthRequired hay không, nếu có, hãy kiểm tra xem đã đăng nhập chưa, sau đó thực hiện phương pháp dựa trên điều đó.

Ví dụ: ứng dụng web có thể tìm kiếm chú thích trong bộ lọc, servlet cơ sở, trình chặn, v.v. và quyết định có nên tiếp tục quá trình yêu cầu hay không.

+0

Tôi hiểu rằng, những gì tôi đang cố gắng tìm hiểu, là làm thế nào để kiểm tra mã của tôi cho chú thích đó. –

+0

@KronosVarmentos Thông qua các cơ chế phản ánh bình thường, như [Method.getDeclaredAnnotations()] (http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Method.html#getDeclaredAnnotations()) hoặc [getAnnotation()] (http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Method.html#getDeclaredAnnotations()) v.v. –

+0

kiểm tra: http: // stackoverflow. com/questions/259140/scanning-java-annotations-at-runtime – Pete

0

Tùy thuộc vào loại ứng dụng bạn đang tạo có một số tùy chọn có sẵn cho bạn để xác định cấp xác thực cho các phương pháp cụ thể.

Tôi rất muốn giới thiệu cho bạn Spring Security cho một tác vụ như vậy.

Ví dụ như ví dụ bên dưới sẽ là kết quả cuối cùng sau khi định cấu hình sử dụng Spring Security.

@Secured({"USER_ROLE"}) 
public String getSecretData() { 
     return "SECRET! SHHH!"; 
} 

Sau đó, chỉ người dùng được xác minh bởi Spring Security mới có vai trò bạn cung cấp cho chú thích sẽ có quyền gọi phương thức.

Có một vài tùy chọn chú thích khác trong Spring Security bạn có thể sử dụng như @PreAuthorize.

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