javascript
security放行 spirng_Spring Security配置
第一步,空Spring Boot環境。
暫時不添加了Spring Security依賴。
第二步,確保項目能夠正常運行。
啟動啟動項?Application.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@EnableAutoConfiguration
public class AuthorityApplication {
public static void main(String[] args) {
SpringApplication.run(AuthorityApplication.class, args);
}
// localhost:8080/
@RequestMapping(value = "/")
public String home() {
return "這是根路徑";
}
// localhost:8080/hello
@RequestMapping(value = "/hello")
public String hello() {
return "hello";
}
}
確保Spring Boot項目能夠正常啟動。
第三步,添加了Spring Security依賴。
org.springframework.bootspring-boot-starter-security
重啟Application,訪問?localhost:8080/?,出現以下界面,自動跳轉至?http://localhost:8080/login?,需要登錄,實現了認證功能。
第四步,自定義Spring Security配置文件?SpringSecurityCustomConfig.java?。
1.實現對主路徑放行、其他路徑請求需要驗證、注銷操作允許任意權限訪問、表單登錄允許任意權限訪問。
2.對js、css、images不做攔截。
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration//配置文件@EnableWebSecurity//打開web支持
public class SpringSecurityCustomConfig extends WebSecurityConfigurerAdapter {@Override
protected void configure(HttpSecurity http) throws Exception {//決定那些請求被攔截
http.authorizeRequests()
.antMatchers("/").permitAll()//主路徑放行
.anyRequest().authenticated()//其他請求需經過驗證
.and()
.logout().permitAll()//注銷操作允許任意權限訪問
.and()
.formLogin().permitAll();//表單登錄允許任意權限訪問
http.csrf().disable();//關閉默認的csrf認證
}@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/js'/**", "/css/**", "/images/**");//對js、css、images不做攔截
}
}
訪問主路徑?http://localhost:8080/?,不需要驗證。
訪問其他路徑?http://localhost:8080/hello?,需要驗證。出現以下界面,自動跳轉至?http://localhost:8080/login
Spring Security常見案例
案例一:只需登錄
不希望花太多時間做登錄功能,也不希望數據庫存儲登錄用戶名和密碼。
自定義Spring Security配置文件?SpringSecurityCustomConfig.java ,通知系統在內存中有一個用戶名為“admin”,用戶密碼為“123456”的用戶,該用戶角色為“ADMIN”。
訪問需要驗證的路徑?http://localhost:8080/hello ,分別輸入錯誤信息和正確信息。
訪問?http://localhost:8080/login?logout?即可登出。
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration// 配置文件
@EnableWebSecurity// 打開web支持
public class SpringSecurityCustomConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// Spring Security提供了一套基于內存的驗證
auth.inMemoryAuthentication()
.withUser("admin")
.password("123456")
.roles("ADMIN");// 自定義角色
// 可以添加若干個auth.inMemoryAuthentication()
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// 決定那些請求被攔截
http
.authorizeRequests()
.antMatchers("/").permitAll()// 主路徑放行
.anyRequest().authenticated()// 其他請求需經過驗證
.and()
.formLogin().permitAll()// 表單登錄允許任意權限訪問
.and()
.logout().permitAll();// 注銷操作允許任意權限訪問
http.csrf().disable();// 關閉默認的csrf認證
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/js'/**", "/css/**", "/images/**");// 對js、css、images不做攔截
}
}
案例二:指定角色,權限按角色分配
自定義Spring Security配置文件?SpringSecurityCustomConfig.java ,通知系統在內存中有一個用戶名為“caiji”,用戶密碼為“caiji”的用戶,該用戶角色為“USER”。
訪問需要驗證的路徑?http://localhost:8080/hello
訪問需要驗證的路徑?http://localhost:8080/roleAuth?,caiji無權限訪問,admin可以訪問
Application.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication@RestController@EnableAutoConfiguration//Spring Boot會自動根據jar依賴自動配置項目@EnableGlobalMethodSecurity(prePostEnabled = true)// 啟動注解@PreAuthorize的作用
public class AuthorityApplication {
public static void main(String[] args) {
SpringApplication.run(AuthorityApplication.class, args);
}// localhost:8080/
@RequestMapping(value = "/")
public String home() {return "這是根路徑";
}// localhost:8080/hello@RequestMapping(value = "/hello")
public String hello() {return "hello ADMIN";
}// localhost:8080/hello@PreAuthorize("hasRole('ROLE_ADMIN')")//RoleVote中定義需要添加前綴@RequestMapping(value = "/roleAuth")
public String roleAuth() {return "hello USER";
}
}
SpringSecurityCustomConfig.jaca@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {//Spring Security提供了一套基于內存的驗證
auth.inMemoryAuthentication()
.withUser("admin")
.password("123456")
.roles("ADMIN");//自定義角色//可以添加若干個auth.inMemoryAuthentication()
auth.inMemoryAuthentication().withUser("caiji").password("caiji").roles("USER");//USER用戶
}
案例三:數據庫管理用戶
新增?UserService?類,實現?UserDetailsService?。
UserService.java
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;
@Component
public class UserService implements UserDetailsService {@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {returnnull;
}
}
將用戶admin、caiji放入數據庫,使用UserService管理。
SpringSecurityCustomConfig.java@Autowired
private UserService userService;@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {//Spring Security提供了一套基于內存的驗證//auth.inMemoryAuthentication()// .withUser("admin")// .password("123456")// .roles("ADMIN");//自定義角色// //可以添加若干個auth.inMemoryAuthentication()// auth.inMemoryAuthentication().withUser("caiji").password("caiji").roles("USER");//USER用戶
auth.userDetailsService(userService);
}
自定義密碼管理驗證,新建?PasswordCustomEncoder?類,實現?PasswordEncoder?接口。
Spring Security提供了許多對密碼加密的封裝類,此處以MD5加密為例。
PasswordCustomEncoder.java
import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;/**
* @author tabjin* create at 2019-06-29 09:05
* @program authority* @description*/public class PasswordCustomEncoder implements PasswordEncoder {
private final static String SALT= "123456";/**
*加密方法,對原始密碼加密* @paramcharSequence* @return
*/
@Override
public String encode(CharSequence charSequence) {
Md5PasswordEncoder md5PasswordEncoder=new Md5PasswordEncoder();return md5PasswordEncoder.encodePassword(charSequence.toString(), SALT);//加密并附加123456
}/**
*匹配方法,對原始密碼和加密后密碼匹配* @paramcharSequence* @params* @return
*/
@Override
public boolean matches(CharSequence charSequence, String s) {
Md5PasswordEncoder md5PasswordEncoder=new Md5PasswordEncoder();return md5PasswordEncoder.isPasswordValid(s, charSequence.toString(), SALT);//保證鹽值和加密時一樣
}
}
回到定義認證的類?SpringSecurityCustomConfig.java
SpringSecurityCustomConfig.java@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {//自定義處理
auth.userDetailsService(userService).passwordEncoder(new PasswordCustomEncoder());//指定好UserService后添加自定義密碼驗證器//Spring Security 默認數據庫處理,表結構位于users.ddl
auth.jdbcAuthentication().usersByUsernameQuery("").passwordEncoder(new PasswordCustomEncoder());
}
總結
以上是生活随笔為你收集整理的security放行 spirng_Spring Security配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: # 字符串从右往左查找_字符串匹配(搜索
- 下一篇: 科大讯飞智能办公本X3发布 售价4999