2008-09-05 194 views

回答

12

晨間

如果使用普通的JSP視圖(如最常見的),那麼只需添加

<% response.setStatus(403); %> 

某處你的視圖文件。頂部是一個不錯的地方。

詳細

在MVC中,我總是設置此視圖,在大多數情況下與Spring-MVC,使用SimpleMappingExceptionResolver提出正確的觀點響應拋出運行時異常。

例如:在控制器或服務層中創建並投入PermissionDeniedException,並讓異常解析器指向視圖文件permissionDenied.jsp。該視圖文件設置403狀態並向用戶顯示適當的消息。

在你的Spring bean的XML文件:

<bean id="exceptionResolver" 
     class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
    <property name="exceptionMappings"> 
    <props> 
     <prop key="PermissionDeniedException">   
     rescues/permissionDenied 
     </prop> 
     ... set other exception/view mappings as <prop>s here ... 
    </props> 
    </property> 
    <property name="defaultErrorView" value="rescues/general" /> 
</bean> 

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/views/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

如果需要實現用戶登錄機制,看看Spring Security(以前Acegi安全)。

5

你可以使用response.setStatus(403)嗎?

+0

這對我有用。 – Jamesla 2013-07-02 02:36:53

+0

@John所提供的鏈接可悲的是不再工作 – BBerry 2016-04-15 12:16:18

+0

@BBerry謝謝你的提醒,它已被刪除。 8年將做到這一點鏈接。 – 2016-04-15 12:49:38

12

使用ExceptionResolver是一個很好的選擇,但如果您只是希望這是一個獨立於視圖的環境,那麼您肯定可以在Controller中撥打response.sendError(HttpServletResponse.SC_FORBIDDEN, "AdditionalInformationIfAvailable");

17

創建一個例外註釋,例如@ResponseStatus例如像這樣:

@ResponseStatus(HttpStatus.FORBIDDEN) 
public class ForbiddenException extends RuntimeException { 
} 

現在只是把你的處理方法異常和響應將有狀態403

19

您也可以只是把

org.springframework.security.access.AccessDeniedException("403 returned"); 

這在響應中返回一個403頭。