使用Spring Initializr创建Springboot项目,选择使用maven构建项目,中间选择依赖时,根据需要,选择了web、jpa、mysql、thymeleaf、devtools等;
如果依赖下载的太慢的话可以修改中央仓库为阿里云的仓库。
<p th:text="${ArticleComments['__${article.getId()}__'].size()}" >
a. 添加依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-securityartifactId>
dependency>
b. 基于注解方式接入security
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
}
c. 基于内存中数据的用户认证
重写WebSecurityConfigurerAdapter类中的protected void configure(AuthenticationManagerBuilder auth)方法;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("admin")
.password("admin")
.authorities("ADMIN"); //分配admin身份
}
d. 自定义拦截器和登录页面
重写WebSecurityConfigurerAdapter类中的protected void configure(HttpSecurity http)方法;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/").permitAll() //任何人都可以访问
.antMatchers("/admin/**").access("hasRole('ADMIN')"
//只有具有admin身份的用户可以访问/admin路径下的页面
.and() .formLogin().loginPage("/login").usernameParameter("username")
.passwordParameter("password").and()
.httpBasic();
}
e. 解决There is no PasswordEncoder mapped for the id "null"报错
@Bean
public static NoOpPasswordEncoder passwordEncoder() {
return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
}
参考:
Securing a Web Application
spring security 入门教程
该过程中有以下几个注意点:
a. 需要改变application.properties中连接数据库的设置;
b. 需要在pom.xml中加入依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
<scope>providedscope>
dependency>
provided表明该包只在编译和测试的时候用,使得项目部署在tomcat下后不与外部的tomcat冲突;
并将
jar
改为
war
c. 需要改MyblogApplication
继承SpringBootServletInitializer,并覆写方法
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
之后按网上的教程打包:
file->project structure->Artifacts 增加一个web application:archive
build->build Artifacts 得到war包
参考:
手工部署Java Web项目
打造完美接口文档 - 发布springboot应用到阿里云服务器
阿里云部署Java网站和微信开发调试心得技巧(上)
使用了FileZilla,十分方便
在tomcat/conf/server.xml中内添加:
<Context path="" docBase="/usr/local/tomcat/webapps/xiguashu-v1" debug="0" privileged="true"> Context>
path为虚拟路径
docBase为web应用的物理路径
这样做使得不需通过x.x.x.x:port/project来访问,而可以通过x.x.x.x:port/path
通过修改server.xml,使tomcat监听80端口
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
但启动tomcat后发现80端口并没有被侦听,关闭防火墙、设置安全组之后依然不行。
搜索后得知,非root权限下运行tomcat无法监听1024以下的端口。
最后的方法是:
sudo ./startup.sh
奇怪的是以下命令却还是无法启动:
sudo service tomcat start