2010-01-27 40 views
7

Tôi muốn có thể tạo bộ điều khiển cơ sở trong ứng dụng Spring của mình, trong số những thứ khác, xác định xem người dùng có phải là người dùng đã đăng ký hay không. Bộ điều khiển cơ sở này, theo mẫu thiết kế mẫu, sẽ chứa một phương thức được bảo vệ trừu tượng mà các lớp con điều khiển sẽ thực hiện.Mùa xuân: điều khiển kế thừa bằng cách sử dụng chú thích @Controller

Phương pháp trừu tượng sẽ chuyển cho trường hợp Người dùng, đã đăng ký hoặc cách khác. Tuy nhiên, tôi không có ý tưởng làm thế nào tôi sẽ làm điều này vì có vẻ như bằng cách sử dụng bộ điều khiển hoàn toàn bằng cách sử dụng chú thích @Controller mỗi bộ điều khiển là miễn phí để xác định phương pháp xử lý yêu cầu của họ theo cách mà họ thích.

Tạo một số loại dịch vụ người dùng được đưa vào từng bộ điều khiển và được sử dụng để xác thực người dùng là một cách để giải quyết vấn đề này? Điều này đặt ra câu hỏi (ít nhất là đối với tôi) làm thế nào để một bộ điều khiển có được một tổ chức của một HttpServletRequest hoặc đối tượng Session?

Cảm ơn.

Trả lời

1

Tôi nghĩ bộ điều khiển cơ sở không phải là ý tưởng hay nếu mã duy nhất cần có là cho UserAuthentication ... thay vì sử dụng bảo mật Spring. Đây là lựa chọn tốt nhất.

Ngoài ra, bạn có thể có phương pháp như thế này ... hãy nhìn vào các tài liệu tham khảo Xuân ..

@Controller("loginController") 
public class LoginController {  

    @RequestMapping(value="/login.do", method=RequestMethod.POST) 
    public String login(Model model, HttpServletRequest request) { 

     String userIdFromRequest = (String)request.getParameter("userId"); 
     String password = (String)request.getParameter("password"); 

     boolean verified = ...send userIdFromRequest and password to the user service for 
     verification... 

     if (verified){ 
     request.getSession().setAttribute("userId", userIdFromRequest); 
     } 

    }   

    //More Methods 

} 

Did it giúp?

-SB

+0

Cảm ơn bạn SB, Tôi đã cân nhắc điều đó nhưng chỉ thu thập một số ý kiến ​​về vấn đề này ngay bây giờ. Tôi nghiêm túc xem xét Spring Security nhưng cũng muốn tránh trùng lặp mã ở mọi nơi - tôi cần phải đọc về Spring Security. – richever

13
  1. Xác định một abstract BaseController, không có chú thích
  2. Xác định cụ thể và phương thức trừu tượng
  3. Gọi các phương pháp này từ các lớp con (được chú thích với @Controller) bất cứ khi nào cần thiết.
+0

Cảm ơn Bozho, đó là loại suy nghĩ của tôi. Tôi đánh giá cao phản ứng. – richever

+2

Nhưng nếu một số phương pháp cụ thể trong BaseController cần truy cập một số dịch vụ autowired thì sao? Tôi tưởng tượng một BaseController có chung '@Autowired UserService userService'. Điều này có nghĩa là 'BaseController trừu tượng' phải được chú thích bằng' @ Controller' để tạo các tác phẩm tự động không? – bertie

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