您好,登錄后才能下訂單哦!
要在Spring Boot 2和MyBatis中集成CAS單點登錄,你需要遵循以下步驟:
在你的pom.xml
文件中添加Java CAS客戶端庫和Spring Security依賴:
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.6.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
創(chuàng)建一個名為CasConfig.java
的新類,并添加以下代碼:
import org.jasig.cas.client.cas20.Cas20ServiceTicketValidator;
import org.jasig.cas.client.config.Cas20Configuration;
import org.jasig.cas.client.config.Cas20ServiceRegistry;
import org.jasig.cas.client.config.SingleSignOutConfiguration;
import org.jasig.cas.client.util.CommonUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class CasConfig {
@Value("${cas.server.prefix}")
private String casServerPrefix;
@Bean
public Cas20ServiceTicketValidator cas20ServiceTicketValidator() {
return new Cas20ServiceTicketValidator(casServerPrefix);
}
@Bean
public Cas20Configuration cas20Configuration() {
Cas20Configuration configuration = new Cas20Configuration();
configuration.setServiceRegistry(casServiceRegistry());
configuration.setSingleSignOutEnabled(true);
configuration.setSignOutUrl(casServerPrefix + "/cas/logout");
return configuration;
}
@Bean
public Cas20ServiceRegistry casServiceRegistry() {
Map<String, String> serviceRegistry = new HashMap<>();
serviceRegistry.put("your-service-id", "http://localhost:8080/your-service-path");
return new Cas20ServiceRegistry(serviceRegistry);
}
@Bean
public SingleSignOutConfiguration singleSignOutConfiguration() {
SingleSignOutConfiguration configuration = new SingleSignOutConfiguration();
configuration.setCasServerLoginUrl(casServerPrefix + "/cas/login");
return configuration;
}
}
請根據(jù)你的CAS服務(wù)器信息替換casServerPrefix
和your-service-id
。
創(chuàng)建一個名為SecurityConfig.java
的新類,并添加以下代碼:
import org.jasig.cas.client.authentication.AttributePrincipal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Autowired
private UserDetailsService userDetailsService;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityContextLogoutHandler securityContextLogoutHandler() {
return new SecurityContextLogoutHandler();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.logoutHandler(securityContextLogoutHandler())
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Bean
public Cas20AuthenticationProvider cas20AuthenticationProvider() {
Cas20AuthenticationProvider provider = new Cas20AuthenticationProvider();
provider.setTicketValidator(cas20ServiceTicketValidator());
provider.setServiceRegistry(casServiceRegistry());
provider.setAuthenticationStrategy(new Cas20AuthenticationStrategy(cas20ServiceTicketValidator(), cas20Configuration(), casServiceRegistry()));
return provider;
}
}
在你的application.properties
文件中添加以下配置,以便將CAS認(rèn)證與MyBatis集成:
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.yourproject.domain
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password
創(chuàng)建一個名為LoginController.java
的新類,并添加以下代碼:
import org.jasig.cas.client.authentication.AttributePrincipal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class LoginController {
@Autowired
private UserDetailsService userDetailsService;
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
public String loginPost(AttributePrincipal principal) {
String username = principal.getName();
// 在這里驗證用戶憑據(jù)并設(shè)置UserDetails對象
return "redirect:/home";
}
@GetMapping("/logout")
public String logout() {
return "redirect:/login?logout";
}
}
創(chuàng)建一個名為HomeController.java
的新類,并添加以下代碼:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/home")
public String home() {
return "home";
}
}
現(xiàn)在,你已經(jīng)成功地將Spring Boot 2、MyBatis和CAS單點登錄集成在一起。用戶可以通過訪問/login
URL進(jìn)行登錄,然后訪問受保護(hù)的資源,如/home
。用戶還可以通過訪問/logout
URL進(jìn)行注銷。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。