前几天在做系统登录功能的时候碰到了跨域问题,原本的跨域问题其实已经在shiro过滤器中解决了,但是由于登录是一个不同的url,所以要写一个新的过滤器
新建一个过滤器LoginFilter.java
代码如下
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { //解决跨域问题的代码 HttpServletRequest httpServletRequest = (HttpServletRequest)req; HttpServletResponse httpServletResponse = (HttpServletResponse) res; httpServletResponse.setHeader("Access-control-Allow-Origin", httpServletRequest.getHeader("Origin")); httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true"); httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS"); httpServletResponse.setHeader("Access-Control-Allow-Headers", httpServletRequest.getHeader("Access-Control-Request-Headers")); chain.doFilter(req, httpServletResponse); } @Override public void destroy() { // TODO Auto-generated method stub } }
新建一个WebAppConfig.java
代码如下
@Configuration public class WebAppConfig{ @Bean public FilterRegistrationBean myFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new LoginFilter()); registration.addUrlPatterns("/**/**");// 拦截路径 registration.setName("LoginFilter");// 拦截器名称 registration.setOrder(1);// 顺序 return registration; } }
@Configuration注解等价于XML中配置beans
@Bean标注方法等价于XML中配置bean
通过以上就可以解决跨域问题了,记录一下