2012-01-22 19 views
8

Tôi có một phương pháp trong điều khiển của tôi như thế này:Mùa xuân 3.x - làm cách nào để chuyển hướng từ bản đồ trả về dữ liệu?

@RequestMapping(value="getData", method=RequestMethod.GET) 
@ResponseBody 
public List<MyDataObj> getData() 
{ 
    return myService.getData(); 
} 

Các dữ liệu được trả về như JSON hay xsl, tùy thuộc vào yêu cầu.

Nếu người đưa ra yêu cầu là không được phép truy cập dữ liệu tôi cần phải chuyển hướng người dùng đến một trang "không được uỷ quyền", do đó một cái gì đó như thế này:

@RequestMapping(value="getData", method=RequestMethod.GET) 
@ResponseBody 
public List<MyDataObj> getData() 
{ 
    if (!isAuthorized()) 
    { 
    // redirect to notAuthorized.jsp 
    } 
    return myService.getData(); 
} 

Tất cả các ví dụ tôi đã nhìn thấy sử dụng Spring yêu cầu phương thức trả về hoặc là String hoặc ModelAndView. Tôi đã nghĩ đến việc sử dụng HttpServletResponse.sendRedirect() nhưng tất cả các JSP của tôi đều nằm trong WEB-INF và không thể liên lạc trực tiếp được.

Làm cách nào để từ chối quyền truy cập một cách duyên dáng vào URL yêu cầu dữ liệu?

Trả lời

5

Một giải pháp thanh lịch hơn có thể là to use a HandlerInterceptor sẽ kiểm tra ủy quyền, chặn bất kỳ yêu cầu nào không được phép tiếp tục. Nếu yêu cầu sau đó đến bộ điều khiển của bạn, bạn có thể giả sử nó là OK.

+0

Điều này không hiệu quả vì tôi đã chú thích phương pháp của tôi với '@ ResponseBody'. Tất cả những gì tôi có với đối tượng 'RedirectView' trong JSON. Tôi đang nhìn vào 'HandlerInterceptor' bây giờ. – Paul

+0

@Paul: Tốt. Tôi đã chỉnh sửa câu trả lời của mình để xóa bit đó. – skaffman

+1

Tôi đã phải làm lại cấu trúc thư mục của mình một chút (tôi có mọi thứ dưới '/') nhưng sử dụng một máy đánh chặn hoạt động rất tốt, cảm ơn. – Paul

1

Một cách tiếp cận khác là bộ lọc. Bạn có thể di chuyển tất cả các logic bảo mật vào bộ lọc và giữ mã sạch trong bộ điều khiển.

0

Khá đơn giản:

Gửi một tình trạng lỗi cho khách hàng

response.setStatus(HttpServletResponse.SC_NO_CONTENT); 

và xử lý cùng với bạn ajax xử lý gọi lại và chuyển hướng. :)

+0

Tôi không sử dụng Ajax ở đây. – Paul

+0

Nếu không có Ajax sau đó là e-kẽm và skaffman đề nghị bạn nên đi cho prehandle, kiểm tra ủy quyền và sử dụng xem chuyển hướng. – Abhi

4

Câu trả lời ở bên dưới. Nhưng trường hợp cụ thể của bạn sẽ thích xử lý với cách tiếp cận khác.

@RequestMapping(value = "/someUrl", method = RequestMethod.GET) 
@ResponseBody 
public Response someMethod(String someData, HttpServletResponse response){ 
    if(someData=="redirectMe"){ 
     response.sendRedirect(ppPageUrl); 
    } 
... 
} 
Các vấn đề liên quan