http.csrf().disable(). authorizeRequests() .antMatchers("/miniapp/login", "/user/login").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/v2/api-docs", "/webjars/**").permitAll() .anyRequest().authenticated() .and() .httpBasic(); public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("admin").password("{noop}admin").roles("ADMIN") .and() .withUser("user").password("{noop}user").roles("USER"); } public UserDetails loadUserByUsername(String phone) throws UsernameNotFoundException { User user = userInfoService.selectUserByPhone(phone); if (null == user) { throw new UsernameNotFoundException("User not found with phone: " + phone); } return new org.springframework.security.core.userdetails.User(user.getPhoneNumber(), user.getPassword(), getAuthority(user.getRole())); } private List<GrantedAuthority> getAuthority(Integer role) { String roles = "user"; switch (role){ case 0: roles = "admin"; break; case 1: roles = "user"; break; case 2: roles = "staff"; break; } return Arrays.asList(new SimpleGrantedAuthority(roles)); },请问login以外的接口前端如何访问
时间: 2024-02-14 22:11:24 浏览: 150
除了 "/miniapp/login" 和 "/user/login" 之外的接口,前端需要在请求头中添加认证信息,即在每个请求的头部添加 "Authorization" 字段,字段值为 "Bearer [token]",其中 [token] 为登录成功后后端返回的认证 token。例如:
```
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiaWF0IjoxNTE2MjM5MDIyfQ.6y4Zv4uN6K8Ck-LxkHNJvDROQ2LhO4HgJp0jvC1B9k5nXWaXZx5GgJXz4QdX3zrJzYw2mZQjZpQVvL5TlKX8A
```
其中,JWT token 的生成和验证可以使用 Spring Security 提供的相关类和接口。
相关问题
http.headers().frameOptions().disable(); http.authorizeRequests().anyRequest().permitAll(); // .antMatchers("/logout").permitAll() // .antMatchers("/login").permitAll().anyRequest().authenticated(); http.formLogin().usernameParameter("name").passwordParameter("password").successHandler(loginSuccessHandler()) .failureHandler(failureHandler()); http.csrf().disable(); http.addFilterBefore(verifyCodeFilter, UsernamePasswordAuthenticationFilter.class);
这段代码是用于配置 Spring Security 的 HTTP 请求授权和登录相关的设置。
`http.headers().frameOptions().disable()` 方法的作用是禁用 X-Frame-Options,以允许在 iframe 中显示网页。
`http.authorizeRequests().anyRequest().permitAll()` 方法的作用是允许所有请求都通过授权验证,即不需要进行身份验证即可访问任何请求。
接下来,注释掉的两行代码 `.antMatchers("/logout").permitAll()` 和 `.antMatchers("/login").permitAll().anyRequest().authenticated()` 是用于配置特定 URL 的权限控制。`.antMatchers("/logout").permitAll()` 表示允许 "/logout" URL 的请求无需身份验证,`.antMatchers("/login").permitAll().anyRequest().authenticated()` 表示允许 "/login" URL 的请求无需身份验证,但其他请求需要进行身份验证。
`http.formLogin().usernameParameter("name").passwordParameter("password").successHandler(loginSuccessHandler()).failureHandler(failureHandler())` 方法用于配置表单登录的相关设置。其中,`.usernameParameter("name")` 配置了登录表单中用户名输入框的参数名为 "name",`.passwordParameter("password")` 配置了密码输入框的参数名为 "password"。`.successHandler(loginSuccessHandler())` 配置了登录成功后的处理器,`.failureHandler(failureHandler())` 配置了登录失败后的处理器。
`http.csrf().disable()` 方法用于禁用 CSRF(跨站请求伪造)防护功能。
最后一行代码 `http.addFilterBefore(verifyCodeFilter, UsernamePasswordAuthenticationFilter.class)` 是用于添加一个自定义的过滤器 `verifyCodeFilter` 到 Spring Security 过滤器链中,在 `UsernamePasswordAuthenticationFilter` 之前执行该过滤器。
http.csrf().disable(). authorizeRequests() .antMatchers("/miniapp/login", "/PC/login").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/v2/api-docs", "/webjars/**").permitAll() .anyRequest().authenticated() .and() .httpBasic(); public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("admin").password("{noop}admin").roles("ADMIN") .and() .withUser("user").password("{noop}user").roles("USER"); } public UserDetails loadUserByUsername(String phone) throws UsernameNotFoundException { User user = userInfoService.selectUserByPhone(phone); if (null == user) { throw new UsernameNotFoundException("User not found with phone: " + phone); } return new org.springframework.security.core.userdetails.User(user.getPhoneNumber(), user.getPassword(), getAuthority(user.getRole())); } private List<GrantedAuthority> getAuthority(Integer role) { String roles = "user"; switch (role){ case 0: roles = "admin"; break; case 1: roles = "user"; break; case 2: roles = "staff"; break; } return Arrays.asList(new SimpleGrantedAuthority(roles)); } ,/PC/login返回token后,访问@ApiOperation(value = "PC端用户修改密码") @PutMapping("/ChangePassword") public JsonData ChangePassword(@RequestBody UserInfo userInfo) 该接口,前端vue要如何访问?
您可以在前端使用axios库来发送请求,示例代码如下:
```javascript
// 假设服务端地址为 http://localhost:8080
// 先请求登录接口获取token
axios.post('http://localhost:8080/PC/login', {
// 填写登录信息
}).then(response => {
// 登录成功后在响应中获取token
const token = response.data.token;
// 发送修改密码请求,需要在请求头中携带token
axios.put('http://localhost:8080/ChangePassword', {
// 填写修改密码信息
}, {
headers: {
'Authorization': 'Bearer ' + token
}
}).then(response => {
// 处理修改密码请求响应
}).catch(error => {
// 处理请求异常
});
}).catch(error => {
// 处理登录请求异常
});
```
在请求修改密码接口时,需要在请求头中携带token,Authorization字段的值为 "Bearer " + token。
阅读全文