我是Spring Boot的新手,我正在尝试我的示例应用程序上的spring boot安全性,而且我正在使用MongoDB .
我正面临一些问题 . 我正在使用POSTMAN来测试我开发的Web服务 .
我无法使用POSTMAN登录登录方法 .
这是我的主要应用程序
import org.joda.time.DateTime;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
@Bean
CommandLineRunner init(final UserRepository userRepository, final UserRoleRepository userRoleRepository) {
return new CommandLineRunner() {
@Override
public void run(String... arg0) throws Exception {
UserRole usRole = new UserRole();
usRole.setUroName("Admin");
usRole.setUroCode("admin");
usRole.setUroType("admin");
usRole.setUroCreatedDttm(new DateTime().toString());
userRoleRepository.save(usRole);
UserTbl userTbl = new UserTbl();
userTbl.setEmail("ganeshsagar58@gmail.com");
userTbl.setUsrPassword("c0b137fe2d792459f26ff763cce44574a5b5ab03");
userTbl.setFirstName("Ganesh");
userTbl.setLastName("Bhagavath");
UserRole userRole = userRoleRepository.findByUroName("Admin");
userTbl.setUro(userRole);
userRepository.save(userTbl);
}
};
}
}
这是UserTbl POJO
import java.math.BigInteger;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.joda.time.DateTime;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
@Document
public class UserTbl
{
@Id
private BigInteger id;
@DBRef
private UserRole uro;
@NotNull
@Size(min=2, max =30)
private String firstName;
@NotNull
@Size(min=2, max =30)
private String lastName;
@NotNull
@Email
private String email;
@NotNull
private String usrPassword;
private DateTime usrCreatedDttm;
private DateTime usrModifiedDttm;
public BigInteger getId() {
return id;
}
public void setId(BigInteger id) {
this.id = id;
}
public UserRole getUro() {
return uro;
}
public void setUro(UserRole uro) {
this.uro = uro;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsrPassword() {
return usrPassword;
}
public void setUsrPassword(String usrPassword) {
this.usrPassword = usrPassword;
}
public DateTime getUsrCreatedDttm() {
return usrCreatedDttm;
}
public void setUsrCreatedDttm(DateTime usrCreatedDttm) {
this.usrCreatedDttm = usrCreatedDttm;
}
public DateTime getUsrModifiedDttm() {
return usrModifiedDttm;
}
public void setUsrModifiedDttm(DateTime usrModifiedDttm) {
this.usrModifiedDttm = usrModifiedDttm;
}
}
这是UserRole POJO
import java.math.BigInteger;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document
public class UserRole
{
@Id
private BigInteger id;
private String uroName;
private String uroCode;
private String uroType;
private String uroCreatedDttm;
private String uroModifiedDttm;
public BigInteger getId() {
return id;
}
public void setId(BigInteger id) {
this.id = id;
}
public String getUroName() {
return uroName;
}
public void setUroName(String uroName) {
this.uroName = uroName;
}
public String getUroCode() {
return uroCode;
}
public void setUroCode(String uroCode) {
this.uroCode = uroCode;
}
public String getUroType() {
return uroType;
}
public void setUroType(String uroType) {
this.uroType = uroType;
}
public String getUroCreatedDttm() {
return uroCreatedDttm;
}
public void setUroCreatedDttm(String uroCreatedDttm) {
this.uroCreatedDttm = uroCreatedDttm;
}
public String getUroModifiedDttm() {
return uroModifiedDttm;
}
public void setUroModifiedDttm(String uroModifiedDttm) {
this.uroModifiedDttm = uroModifiedDttm;
}
}
这是我的Websecurity课程
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.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
{
private UserRepository userRepository;
private BCryptPasswordEncoder bCryptPasswordEncoder;
private UserRoleRepository userRoleRepository;
@Autowired
public void setUserRoleRepository(UserRoleRepository userRoleRepository)
{
this.userRoleRepository = userRoleRepository;
}
@Autowired
public void setUserRepository(UserRepository userRepository)
{
this.userRepository = userRepository;
}
@Autowired
public void setbCryptPasswordEncoder(BCryptPasswordEncoder bCryptPasswordEncoder)
{
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}
@Bean
public BCryptPasswordEncoder passwordEncoder(){
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
return bCryptPasswordEncoder;
}
@Bean
protected
UserDetailsService userDetailsService() {
return new UserDetailsService() {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserTbl user = userRepository.findUserByEmail(username);
if (user != null) {
return new User(user.getEmail(), user.getUsrPassword(), true, true, true, true,
AuthorityUtils.createAuthorityList(userRoleRepository.findByUroName("Admin").getUroName()));
} else {
throw new UsernameNotFoundException("could not find the user '"
+ username + "'");
}
}
};
}
public void init(AuthenticationManagerBuilder auth) throws Exception
{
auth.userDetailsService(userDetailsService()).passwordEncoder(bCryptPasswordEncoder);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**", "/posts/**", "/users/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
当我使用POST方法(在UserTbl中提到的用户名和密码)命中localhost:8080 /登录POSTMAN时,它说
{
"timestamp": "2018-03-31T16:18:40.791+0000",
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/login"
}
我的application.properties文件
spring.data.mongodb.database=web_application
1 回答
如果您在application.properties文件中明确定义了不同的上下文,请检查一次 .
Spring Boot 1.X
Spring Boot 2.0
如果是这样,您需要为请求URL添加上下文路径,
喜欢 ,