Я хочу получить доступ к / registration / createUser URL без каких-либо ограничений или до входа в систему. Однако после добавления httpBasi c () в настройках безопасности он выдает код ошибки 401. но если я использую formlogin () вместо httpBasi c (), то он работает как положено. но функциональность входа не работает.
для нижеуказанного кода функция входа в систему работает, но функция allowall () не работает
SecurityConfiguration.java
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.cors();
http.httpBasic()
.and().authorizeRequests()
.antMatchers("/registration/createUser").permitAll()
.antMatchers("/rpa/api/v1/**").authenticated()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
;
для кода ниже функция allowall () работает, но функция входа в систему не работает
SecurityConfiguration.java
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.cors();
http.authorizeRequests()
.antMatchers("/registration/createUser").permitAll()
.antMatchers("/rpa/api/v1/**").authenticated()
.antMatchers("/admin/**").hasRole("ADMIN")
.and().formLogin()
.permitAll();
}
RegistrationController. java
@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/registration")
public class RegistrationController {
@Autowired
private UserRepository userRepository;
@Autowired()
PasswordEncoder bCryptPasswordEncoder;
@RequestMapping(value = "/createUser",method = RequestMethod.POST)
@ResponseBody
public String createNewRegistration(@RequestBody USerDto uSerDto) throws Exception {
Optional<User> existingUser=userRepository.findByUserName(uSerDto.getUserName());
if(existingUser.isPresent()){
throw new Exception();
}else{
String plainText=uSerDto.getPassword();
String encrypt= bCryptPasswordEncoder.encode(plainText);
User user = new User();
user.setUserName(uSerDto.getUserName());
user.setEmail(uSerDto.getEmail());
user.setPassword(encrypt);
user.setPlainTextPSW(plainText);
HashSet hashSet= new HashSet();
Role role= new Role();
role.setRole(uSerDto.getRole());
role.setDescription(uSerDto.getPassword());
hashSet.add(role);
user.setRoles(hashSet);
userRepository.save(user);
return "USer Added successfully";
}
}
loginController. java
@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/")
public class loginController {
@RequestMapping(value = "/login",method = RequestMethod.GET)
@ResponseBody
public String login() throws Exception {
return "success";
}
}
loginservice.ts
login(username:string,password:string){
const headers = new HttpHeaders({ Authorization: 'Basic ' + btoa(username + ':' + password) });
return this.httpClient.get("http://localhost:8888/login",{headers,responseType: 'text' as 'json'})
}
registration.ts
saveUser(userName,email,password, role) {
const headers = new HttpHeaders({ Authorization: 'Basic ' +
btoa(userName + ':' + password +email + ':' + role) });
return this.http.post<any>('http://localhost:8888/registration/createUser',
{
userName:userName,
password:password,
email:email,
role:role,
},{headers}). pipe( share(),
catchError(this.errorHandle));
ниже текста находится запрос на / createuser . Это allowAll (), но оно выдает 401, даже если нет аутентификации.
Request URL: http://localhost:8888/registration/createUser
Request Method: POST
Status Code: 401
Remote Address: [::1]:8888
Referrer Policy: no-referrer-when-downgrade
Access-Control-Allow-Origin: *
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Type: application/json;charset=UTF-8
Date: Thu, 26 Mar 2020 05:53:13 GMT
Expires: 0
Pragma: no-cache
Transfer-Encoding: chunked
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
WWW-Authenticate: Basic realm="Realm"
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Authorization: Basic cm46YXdlcnJ1YXNlQGdtYWlsLmNvbTp1c2Vy
Connection: keep-alive
Content-Length: 75
Content-Type: application/json
Host: localhost:8888
Origin: http://localhost:4200
Referer: http://localhost:4200/login
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
{userName: "rn", password: "awer", email: "ruase@gmail.com", role: "user"}
userName: "rn"
password: "awer"
email: "ruase@gmail.com"
role: "user"
ответ
{"timestamp":"2020-03-26T05:53:13.578+0000","status":401,"error":"Unauthorized","message":"Unauthorized","path":"/registration/createUser"}
так как добиться того и другого, когда я пытаюсь получить доступ из моего angular пользовательского интерфейса.