Перенаправление на страницу ошибки уровня белого после аутентификации - PullRequest
0 голосов
/ 15 июня 2019

Я внедряю Spring Security в проект.мы используем спящий в качестве ORM.Проблема, которую я получаю, заключается в том, что страница перенаправляется на страницу с ошибкой уровня белого, на которой написано Access Is Denied, хотя мы вводим правильные учетные данные.

Роли и пользователи хранятся в БД.Я создал класс CustomUserDetails Класс CustomUserDetails тоже.Но не получил никакой причины, по которой он не работает.

CustomUserDetails

public class CustomUserDetals implements UserDetails {

    @Autowired
    private User user;

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {

        return user.getRole().stream().map(role-> new SimpleGrantedAuthority("ROLE_"+role))
                .collect(Collectors.toList());
    }

    @Override
    public String getPassword() {
        // TODO Auto-generated method stub
        return user.getPassword();
    }

    @Override
    public String getUsername() {
        // TODO Auto-generated method stub
        return user.getUserName();
    }

    @Override
    public boolean isAccountNonExpired() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean isEnabled() {
        // TODO Auto-generated method stub
        return true;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

}

SeccrityConfig

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter{

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.userDetailsService(userDetailsService).passwordEncoder(encodePwd());
    }



    @Bean
    public BCryptPasswordEncoder encodePwd() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {


        http.csrf().disable();
        http.authorizeRequests().antMatchers("/user/admin/").authenticated().anyRequest().hasAnyRole("superadmin").and()
                .authorizeRequests().antMatchers("/user/welcome/").authenticated().anyRequest().hasAnyRole("user").and()
                .authorizeRequests().antMatchers("/").authenticated().anyRequest().permitAll().and().formLogin()
                .permitAll();



    }

}

CustomUserDetailsService

Service
@Transactional
public class CustomUserDetailsService implements UserDetailsService{

    @Autowired
    private UserRoleRepo repo;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        User user= repo.findUserWithUsername(username);
        CustomUserDetals details= null;

        if(user!= null) {
            details= new CustomUserDetals();
            details.setUser(user);
        }else {
            throw new UsernameNotFoundException("User Not Exist With Name"+ username);
        }

        return details;
    }


}

RepositoryMethod

@Override
    public User findUserWithUsername(String username) {

        Query query= getSession().createQuery(loadUserName);
        query.setString(0, username);
        User u= null;

        Iterator<User> iterator= query.iterate();

        while(iterator.hasNext()) {
            u= iterator.next();
            System.out.println(u.getUserName()+" "+u.getMobileNo()+" "+u.getRole().toString());
        }

        return u;

    }

Контроллер

@RestController
@RequestMapping("/user")
public class UserRoleController {

    @Autowired
    private BCryptPasswordEncoder encoder;
    @Autowired
    private UserRoleService service;


    /*
     * @PostMapping("/add") public ResponseEntity<String> saveUser(@RequestBody User
     * user) { String pass = user.getPassword();
     * user.setPassword(encoder.encode(pass)); String temp = service.saveUser(user);
     * return new ResponseEntity<String>(temp, HttpStatus.OK); }
     */

    @GetMapping("/welcome")
    @PreAuthorize("hasAnyRole('user')")
    public String iMUser() {
        System.out.println("WORKED");
        return "Worked";
    }


    @GetMapping("/admin")
    @PreAuthorize("hasAnyRole('superadmin')")
    public ResponseEntity<String> saveUser(){
        User user= new User();
        Set<Role> role= new HashSet<Role>();
        Role role1= new Role();
        role1.setRole("user");

        user.setUserName("amalswain");
        user.setPassword(encoder.encode("password"));
        user.setMobileNo(7606844075L);

        role.add(role1);
        role.add(role1);
        role1.setUser(user);
        user.setRole(role);
        String temp= service.saveUser(user);
        return new ResponseEntity<String>(temp,HttpStatus.OK);
    }

}

403 - Запрещено

1 Ответ

1 голос
/ 15 июня 2019

В методе настройки из SecurityConfig попробуйте это:

http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/user/admin/").hasRole("superadmin")
            .antMatchers("/user/welcome/").hasAnyRole("user")
            .antMatchers("/").permitAll()
            .and()
            .formLogin().permitAll();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...