根據(jù)《Java EE開發(fā)的顛覆者 Spring Boot 實戰(zhàn)》來學習Spring Security精置,然后照著書上的代碼去敲证九,發(fā)現(xiàn)了很多書上寫和實際情況不一樣的地方车柠。
- 書上的User實體類還可以實現(xiàn)接口霸饲,而我如果實現(xiàn)接口UserDetails它改,一運行就會報錯,解決辦法是新創(chuàng)建一個MyUserDetails去繼承User實體類慌核,然后實現(xiàn)UserDetails接口帕识。
- 書上說Spring Boot針對Spring Security有自動配置,其中包括忽略/css/遂铡、/js/、/images/等靜態(tài)文件的攔截晶姊,然后書中的實戰(zhàn)代碼也并沒有對這幾個文件設(shè)置允許訪問扒接,依然可以引用bootstrap,可我在實際代碼中發(fā)現(xiàn)并不可以们衙!還是要給這幾個文件路徑進行匹配钾怔,然后允許所有用戶訪問,看下面的代碼
http.authorizeRequests()
//允許所有用戶訪問"/","/jquery/**","/semantic/**","/css/**","/js/**","/images/**"
.antMatchers("/",
"/jquery/**",
"/semantic/**",
"/css/**",
"/js/**",
"/images/**",
"/fonts/**",
"/**/favicon.ico",
"/**").permitAll()
//其他請求需要登錄認證
.anyRequest().authenticated()
如果不加上這段代碼訪問靜態(tài)文件都成302蒙挑,訪問靜態(tài)文件全都跳轉(zhuǎn)到login去了宗侦。
但新的問題是加上這段代碼后訪問靜態(tài)文件又變成404了,檢查了幾十遍路徑?jīng)]有錯忆蚀,然后在static文件夾下隨便新建了一個txt文件去訪問矾利,也是404,最后解決辦法看下面代碼
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
}
重點是這里
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
需要在后面重新映射一下靜態(tài)資源路徑馋袜,自己覺得原因可能是Spring Boot默認的靜態(tài)資源路徑不知道被我怎么搞的失效了男旗,懷疑和Spring Security有關(guān),
而且在html文件中的引用方式也要改變欣鳖,看代碼
<link rel="stylesheet" type="text/css" th:href="@{/static/semantic/dist/semantic.min.css}">
<script type="text/javascript" th:src="@{/static/js/jquery.min.js}"></script>
<script type="text/javascript" th:src="@{/static/semantic/dist/semantic.min.js}"></script>
我是引用的semantic-ui察皇,引用路徑前面都要加上/static
,Spring Boot默認下是不需要的泽台。