- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为我的新手项目实现基本身份验证(来自 Spring Security)。为了创建用户,我将 JSON 发送到 /register
处的 POST
,然后创建用户并将其放入 H2 内存数据库中 - 这部分工作正常。然后我的 Controller 中有这个方法:
@RequestMapping(value = "/username", method = RequestMethod.GET)
public String currentUserName(Principal principal) {
return principal.getName();
}
返回登录者的姓名。我正在使用 Postman 来完成此操作 - 只需从下拉列表中选择基本身份验证,输入此创建用户的用户名和密码(它在数据库中,我检查过),然后我得到“访问被拒绝”响应 - 所以我想我没有登录正确还是我的 Spring 配置不正确?
我正在使用 Spring Boot 并有 3 个 Spring Security 配置:
UserAuthService.java
@Service
@Transactional
public class UserAuthService implements UserDetailsService {
private UserRepository userRepository;
@Autowired
public UserAuthService(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("Could not find the user: " + username);
}
return new org.springframework.security.core.userdetails.User(
user.getUsername(),
user.getPassword(),
true,
true,
true,
true,
AuthorityUtils.createAuthorityList("USER"));
}
}
AccountConfiguration.java
// Spring Security uses accounts from our database
@Configuration
public class AccountConfiguration extends GlobalAuthenticationConfigurerAdapter {
private UserDetailsService userAuthService;
@Autowired
public AccountConfiguration(UserDetailsService userAuthService) {
this.userAuthService = userAuthService;
}
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userAuthService);
}
}
最后一个选择什么是授权的,什么是不授权的:
WebConfiguration.java
@EnableWebSecurity
@Configuration
public class WebConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// allow everyone to register an account; /console is just for testing
http
.authorizeRequests()
.antMatchers("/register", "/console/**").permitAll();
http
.authorizeRequests()
.anyRequest().fullyAuthenticated();
// making H2 console working
http
.headers()
.frameOptions().disable();
/*
https://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html#when-to-use-csrf-protection
for non-browser APIs there is no need to use csrf protection
*/
http
.csrf().disable();
}
}
如果有人想检查其他配置,这里是 GitHub 项目的链接 - 我对此很陌生,所以也许我没有在这篇文章中添加相关内容: https://github.com/doublemc/ToDoWebApp
最佳答案
您必须在 Spring Security 配置中配置 HTTP 基本身份验证,请参阅 Spring Security Reference :
5.2 HttpSecurity
Thus far our WebSecurityConfig only contains information about how to authenticate our users. How does Spring Security know that we want to require all users to be authenticated? How does Spring Security know we want to support form based authentication? The reason for this is that the
WebSecurityConfigurerAdapter
provides a default configuration in theconfigure(HttpSecurity http)
method that looks like:protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic();
}The default configuration above:
- Ensures that any request to our application requires the user to be authenticated
- Allows users to authenticate with form based login
- Allows users to authenticate with HTTP Basic authentication
您修改(和简化)的代码:
@EnableWebSecurity
@Configuration
public class WebConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/register", "/console/**").permitAll();
.anyRequest().authenticated()
.and()
.headers()
.frameOptions().disable()
.and()
.csrf().disable();
}
}
关于java - BasicAuth 与其余 Controller - 拒绝访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41969688/
我正在尝试将 go 应用程序部署到 Google App Engine,但由于此错误导致编译失败。 request.BasicAuth undefined (type *http.Request ha
我正在尝试使用express-basic-auth对express应用程序中的端点进行一些基本授权,但它一直给我一个401未经授权的错误。我认为我在 Post man 中发送的 header 不正确:
我正在使用 node、express 和 connect 来构建一个简单的应用程序,并按如下方式实现基本的 HTTP 身份验证(为简洁起见,省略了大量代码): var express = requir
我正在将 Express 从 3.x 迁移到 4.x,由于 Express 4 没有 basicAuth,我尝试将其替换为 basic-auth module . 我遇到的问题是异步检查凭据(通过我的
使用Dropwizard Authentication 0.9.0-SNAPSHOT 我想检查数据库用户 (UserDAO) 的凭据。 我收到以下异常 ! org.hibernate.Hibernat
我正在尝试使用 token 实现oauth。一切看起来都很好,但是在 POST 之后 http://localhost:8080/oauth/token?grant_type=password 设置B
喷雾很难!!我现在知道我对 HTTP 协议(protocol)的了解还远远不够,API 设计也不容易。然而,我仍然非常希望我的练习应用程序能够工作。我正在为 POST/PUT/DELETE 方法编写此
假设我已经使用 BasicAuth 启用了对资源的身份验证: class MyBasicAuth(BasicAuth): def check_auth(self,username,passwo
即使我使用 Tornado 发送 401 状态代码,我也没有在 IE/Firefox 中看到密码提示:- import tornado.ioloop import tornado.web class
我开始构建一个非常小的 API,我需要验证一些端点,而不是所有端点。我希望能够选择使用要在“路由”正文中调用的 authenticate! 方法来强制验证的端点。 例如: resource :grou
我正在尝试为我的新手项目实现基本身份验证(来自 Spring Security)。为了创建用户,我将 JSON 发送到 /register 处的 POST,然后创建用户并将其放入 H2 内存数据库中
我正在运行 prerender server一切正常,但现在我想使用 basicAuth 设置一些安全性. 在我的控制台中,我导出了用户名和密码 export BASIC_AUTH_USERNAME=
我的 NodeJS 服务器,使用express,有一堆条目来指定各种路由: app.post('list_streams.json', auth, stream_handler.list_str
我正在尝试使用 Flask 和 HTTP Basic Auth 创建登录系统。我的问题是,我有责任从数据库提供用户信息,还是 basicauth 为我创建和访问这些数据库?如果没有,我可以用什么来做到
我对在 Yii2 中创建 REST api 的简单程度印象深刻。但是,我在理解基本身份验证时遇到了一些麻烦。我的需求非常简单,我希望我的解决方案能够效仿。 我在这里需要基本 token 身份验证。我现
我刚刚使用 express basic auth 在 nodejs 中创建了基本身份验证 var express = require('express'); var app = express();
为了使用基本身份验证来保护整个应用程序,这种方式可以为所有路由器做: package main import ( "crypto/subtle" "net/http" "git
最近我听说 Twitter 将关闭 Twitter API 上的基本身份验证,他们转向 OAuth。 所以我想知道 BasicAuth、OAuth 和 XAuth 之间有什么区别? 每个 Auth 的
在我的设置中,我有一个向我的系统发送 Http 请求的上游系统。这些 Http 请求的 header 中包含 basicAuth token 。 我正在使用 Spring-boot 和外部 tomca
登录认证的路由——app.Handle("GET", "/v1/users/token", u.Token) . 我们可以从 request.BasicAuth 中获取名称和密码。 func (u *
我是一名优秀的程序员,十分优秀!