shiro 怎么拦截unauthorizedexception异常
发布网友
发布时间:2022-04-24 14:52
我来回答
共2个回答
热心网友
时间:2022-05-01 13:12
shiro并没有拦截这个异常啊。
相反,shiro在check的时候抛出了这个异常。
我再补充下。
shiro抛出身份验证和权限管理异常时候,默认操作都是需要在spring.xml配置一个错误页面以供跳转的。配置如下:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- 错误异常转发jsp页面 -->
<prop key="org.apache.shiro.authz.UnauthorizedException">/unauthorized.jsp</prop>
<prop key="org.apache.shiro.authz.UnauthenticatedException">/unauthenticated.jsp</prop>
</props>
</property>
</bean>
但是,有时候我们不需要跳转页面,而是需要返回一个json数据自己解析。那么也可以,需要重写SimpleMappingExceptionResolver的doResolveException方法。然后把spring.xml的SimpleMappingExceptionResolver换成你自己重写的就好了。具体重写示例如下:
@Override
protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) {
try {
// Expose ModelAndView for chosen error view.
BaseResult result = new BaseResult();
if (ex instanceof UnauthorizedException) {
result.setMsg(RespMSG.MSG_UNAUTHORIZED );
result.setStatus(RespMSG.STATUS_UNAUTHORIZED);
} else if (ex instanceof UnauthenticatedException) {
result.setMsg(RespMSG.MSG_UNAUTHENTICATED );
result.setStatus(RespMSG.STATUS_UNAUTHENTICATED);
} else {
result.setMsg(RespMSG.MSG_FAILLED );
result.setStatus(RespMSG.STATUS_FAILLED);
}
response.setHeader("Content-type", "text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.write(new Gson().toJson(result));
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
热心网友
时间:2022-05-01 14:30
我也不清楚,没去看代码,但我知道如何解决。 是报这个错么 Caused by: java.lang.IllegalArgumentException: Odd number of characters 如果是的话 就把spring-shiro.xml里 加密的部分去掉 改成