Java를 백엔드 (RESTful 서비스)로, Angularj를 프런트 엔드로 사용하고 있습니다. 문제는 백 엔드 및 프런트 엔드 응용 프로그램이 다른 포트에 있으므로 CORS 필터를 사용해야한다는 것입니다.Java + angularjs에서 CORS 필터가 작동하지 않습니다.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class CORSFilter implements Filter {
public CORSFilter() {
}
public void init(FilterConfig fConfig) throws ServletException {
}
public void destroy() {
}
public void doFilter(
ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
((HttpServletResponse) response).addHeader("Access-Control-Allow-Origin", "*");
((HttpServletResponse) response).addHeader("Access-Control-Allow-Methods", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
((HttpServletResponse) response).addHeader("Access-Control-Allow-Headers", "GET, PUT, OPTIONS, X-XSRF-TOKEN");
chain.doFilter(request, response);
}
}
의 web.xml :
<filter>
<filter-name>CORSFilter</filter-name>
<filter-class>com.company.companyserver.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CORSFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
편안하고 서비스를 : 그것은 다음과 같습니다
@POST
@Path("login")
@Produces("application/json")
public Response login(@Context HttpServletRequest req, UserTable user) {
req.getSession(true);
if (req.getUserPrincipal() == null) {
try {
req.login(user.getUsername(), user.getPassword());
} catch (ServletException e) {
return Response.status(Response.Status.BAD_REQUEST).type("text/plain").entity("Login or Password is incorrect").build();
}
} else {
return Response.status(Response.Status.OK).type("text/plain").entity("You are already logged in").build();
}
return Response.status(Response.Status.OK).type("text/plain").entity("Login successfull").build();
}
@GET
@Path("logout")
@Produces("application/json")
public Response logout(@Context HttpServletRequest req) {
try {
req.logout();
req.getSession().invalidate();
} catch (ServletException e) {
return Response.status(Response.Status.BAD_REQUEST).type("text/plain").entity("Can not logout").build();
}
return Response.status(Response.Status.OK).type("text/plain").entity("Logout successfull").build();
}
프런트 엔드 :
$http.post(apiUrl + 'usertable/login', {
username: 'admin',
password: 'admin'
});
$http.get(apiUrl + 'usertable/logout').success(function (a) {
var o = a;
});
내가 대해 getUserPrincipal 확인마다() 내 RESTful의 나는 그것을 null과 같게 만든다. 내 java 및 angularjs가 동일한 서버 및 포트에 배포되면 모든 것이 잘 작동합니다. 다른 포트에서 작동하도록 만드는 방법은 무엇입니까?
작동하지 않음 - getUserPrincipal()이 여전히 null입니다. –