下面是我拦截器的代码。
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 获得在下面代码中要用的request,response,session对象
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
HttpSession session = httpRequest.getSession(true);
String[] str = {"login","docs"}; // 路径中包含这些字符串的,可以不用登录直接访问
StringBuffer url = httpRequest.getRequestURL();
// 特殊用途的路径可以直接访问
if (str != null && str.length > 0) {
for (String s : str) {
if (url.indexOf(s) >= 0) {
filterChain.doFilter(servletRequest, servletResponse);
return;
}
}
}
// 从session中获取用户信息
String loginInfo = (String) session.getAttribute("username");
if (null != loginInfo && !"".equals(loginInfo)) {
// 用户存在,可以访问此地址
filterChain.doFilter(servletRequest, servletResponse);
} else {
// 用户不存在,踢回登录页面
// String a = httpRequest.getContextPath()+"/login/notLogin";
servletRequest.getRequestDispatcher("/login/notLogin").forward(servletRequest, httpResponse);
return;
}
}
这里是我web.xml的配置
<!-- 登录过滤器 -->
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>aa.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/aa/*</url-pattern>
<url-pattern>/bb/*</url-pattern>
<url-pattern>/cc/*</url-pattern>
<url-pattern>/dd/*</url-pattern>
<url-pattern>/ee/*</url-pattern>
</filter-mapping>
接口是restful接口。
有大神知道原因吗?
理论上你的配置文件只会起到拦截的作用,不会对get post这些有影响的,可以放一下其他的配置文件以及拦截器class中其他部分的代码吗?使用框架的时候有些方式可以直接限定post get的。
405——方法不被允许。使用该位置不支持的请求方法进行了请求
发下控制器层 或者 servlet看下
同上.补充下你的详细信息..应该是路径配置的问题
@RestController
@RequestMapping(value = "/aa")
public class aaController {
@RequestMapping(method = RequestMethod.POST)
public ResultBody saveRule(@RequestBody SaveRuleInfoVO ruleInfoVO){
return this.ruleService.saveRule(ruleInfoVO);
}
}
这里是我的controller方法