先简单说一下需求: 将一个基于springboot2.0开发的java web项目打成war包,通过tomcat部署到一台linux服务器上,项目相关的一些图片等资源也按照一定规则放置在服务器构建好的目录下。现在需要让用户通过http网页链接的方式(在浏览器端)访问图片,为了访问安全,需要在中间加一层用户认证。认证过程希望尽量简单些,所以就尝试用tomcat自带的身份认证来做。 话不多说,直接上实现流程:
首先,由于要访问本地的静态资源,所以在springboot启动类中加了一项静态资源的映射,使用/image映射本地的/home/zxx/darknet/test目录:
public class FilemicroserviceApplication extends WebMvcConfigurationSupport { @Value("${BASEDIR}") String BASEDIR; // 本地资源文件根目录 public static void main(String[] args) { SpringApplication.run(FilemicroserviceApplication.class, args); } /** * 静态资源映射器 * @param registry */ @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/image/**").addResourceLocations("file:"+BASEDIR+"http://www.likecs.com/"); } }然后,将项目打成war包,我的war包名称为filemicroservice.war,部署到linux服务器tomcat上(即放置在tomcat的webapps目录下):
在tomcat的conf目录下需要配置两个文件:
在tomcat-users.xml文件<tomcat-users></tomcat-users>中加上两条代码,设置访问认证的用户角色和该角色的用户账号和密码,此处,我设置了一个名为uav的角色,并且添加了一个账号为uav,密码为123456,角色为uav的用户:
<role rolename="uav"/> <user username="uav" password="123456" roles="uav"/>接下来在web.xml中设置身份认证,直接翻到文件最下面,在尾标签</web-app>上方加上这块代码:
<security-constraint> <web-resource-collection> <!--项目名称(即放置在webapps下的war包名称)--> <web-resource-name>filemicroservice</web-resource-name> <!--需要安全认证的接口--> <url-pattern>/filemicroservice/image/*</url-pattern> </web-resource-collection> <auth-constraint> <!-- 只允许uav角色的用户访问 --> <role-name>uav</role-name> </auth-constraint> </security-constraint> <login-config> <!--值可以是BASIC/DIGEST/CLIENT_CERT/FORM--> <auth-method>BASIC</auth-method> <!--认证提示信息--> <realm-name>请输入认证用户的账号密码</realm-name> </login-config> <security-role> <role-name>uav</role-name> </security-role>修改保存好上述两个文件后,到bin目录下,通过命令启动tomcat./startup.sh,然后去浏览器通过http访问服务器指定目录下的静态文件:
我在/image映射的目录下存放了一个文件夹,里面放有两张图片,现在,我们通过http去访问图片,浏览器会弹出一个身份认证的弹框:
然后我们输入在tomcat中设置的用户账号和密码,确认访问: