我正在尝试向我的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容器都有一种配置过滤器链的标准方法.