首页 文章

使用spring boot security在Spring Boot中登录问题

提问于
浏览
-1

我是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 回答

  • 1

    如果您在application.properties文件中明确定义了不同的上下文,请检查一次 .

    Spring Boot 1.X

    server.contextPath=/yourAppContext
    server.port=8080
    

    Spring Boot 2.0

    server.servlet.contextPath=/yourAppContext
    

    如果是这样,您需要为请求URL添加上下文路径,

    喜欢 ,

    localhost:8080/yourAppContext/login
    

相关问题