2008-09-05 158 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头。