我正在尝试向我的RESTful Web服务添加BASIC身份验证.目前我对Apache Tomcat 6.0服务器进行BASIC身份验证,但我需要在WebSphere应用程序服务器上部署我的Web服务. 6.1以及我在WebSphere上运行BASIC身份验证时遇到问题.
在Java中是否有办法检查HTTP请求的身份验证标头,如果提供的用户名/密码(以Base64编码)与已知帐户不匹配,则用户输入新的用户名/密码?
我已经尝试过实现Spring Security,但由于我的项目完全没有Spring,所以试图让它工作是一件巨大的痛苦,我试图找到一个简单的解决方案来解决我的相当简单的问题.
解决方法
您应该能够设置一个在REST处理程序之前执行的
servlet filter,检查“授权”请求标头,base 64 decodes它,提取用户名和密码,并进行验证.像这样的东西:
public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) { if (request instanceof HttpServletRequest) { HttpServletRequest request = (HttpServletRequest) req; String authHeader = Base64.decode(request.getHeader("Authorization")); String creds[] = authHeader.split(":"); String username = creds[0],password = creds[1]; // Verify the credentials here... if (authorized) { chain.doFilter(req,res,chain); } else { // Respond 401 Authorization required. } } doFilter(req,chain); }
所有servlet容器都有一种配置过滤器链的标准方法.