登录成功,但即使我允许访问USER,Spring安全也会阻止url。我如何管理这个东西?
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobalSecurity(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication().withUser("sahil").password("123")
.roles("ADMIN","USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login").permitAll()
.antMatchers("/welcome","/inventory/**","/sales/**").access("hasRole('USER')")
.and()
.csrf().disable();
}
登录控制器。JAVA
@Controller
public class LoginController {
@RequestMapping(value = { "/", "/login" }, method = RequestMethod.GET)
public String showLoginPage() {
return "login";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String handleUserLogin(ModelMap model, @RequestParam String name, @RequestParam String password) {
if (!service.validateUser(name, password)) {
model.put("errorMsg", "Invalid Credential");
return "login";
}
System.out.println("principal : " + getLoggedInUserName());
model.put("name", name);
model.put("password", password);
return "welcome";
}
private String getLoggedInUserName() {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
System.out.println("in if");
return ((UserDetails)principal).getUsername();
} else {
System.out.println("in else");
return principal.toString();
}
}
@RequestMapping(value = "/welcome", method = RequestMethod.GET)
public String showWelcomeDashboard() {
return "welcome";
}
}
1.登录成功后,页面重定向到欢迎页面,但url仍然是localhost:8080/Login,而不是localhost:8080/welcome。
2.重定向到URL localhost:8080/sales后,403访问被拒绝。
什么是Spring Security
Spring Security是关于身份验证和授权的,在您的情况下,您缺少身份验证。您的安全配置中没有身份验证配置。您缺少的是Spring Security的身份验证过滤器。Spring Security提供了默认的身份验证过滤器UsernamePasswordAuthenticationFilter
,可以由. formLogin()
配置。您可以使用默认提供的,也可以定义自己的自定义身份验证过滤器(UsernamePasswordAuthenticationFilter
的实现)。
一旦身份验证成功,spring security将为经过身份验证的用户授予权限。如果身份验证配置正确,下面的配置负责身份验证和授权
auth.inMemoryAuthentication().withUser("sahil").password("123")
.roles("ADMIN","USER");
经过身份验证的用户每个请求都将通过filterFilterSecurityInterceptor
传递,它将验证为经过身份验证的用户授予的权限,并为下面代码中给出的资源配置授权。
.antMatchers("/welcome","/inventory/**","/sales/**").access("hasRole('USER')")
由于没有配置身份验证过滤器,您错过了所有这些。
现在为了简单起见use.form在超文本传输协议配置中登录()。
@Override
protected void configure(final HttpSecurity http) throws Exception
{
http
.authorizeRequests()
.antMatchers("/welcome","/inventory/**","/sales/**").access("hasRole('USER')")
.and().exceptionHandling()
.accessDeniedPage("/403")
.and().formLogin()
.and().logout()
.logoutSuccessUrl("/login?logout=true")
.invalidateHttpSession(true)
.and()
.csrf()
.disable();
}
. formLogin()
没有任何配置,提供带有用户名和密码默认表单参数的默认登录页面。身份验证后,它会重定向到"/"
如果您想提供自定义登录页面,请使用以下配置。
.and().formLogin()
.loginPage("/login")
.usernameParameter("email").passwordParameter("password")
.defaultSuccessUrl("/app/user/dashboard")
.failureUrl("/login?error=true")
。登录页面(“”
——您的自定义登录页面URL。usernameParameter(“”)。passwordParameter(“”)
-自定义登录表单参数。defaultSuccessUrl(“”)
-成功验证后的页面url。failureUrl(“”)
-身份验证失败后的页面url
注意:你不应该在你的控制器中使用“/login”POST方法,即使你写了,spring security filter chain也无法访问它。因为你的配置以前是错误的,所以它以前就达到了!现在,从控制器中移除这些组件,并使用上述常规方法
我已经将Spring security添加到我的项目中,并将其配置为 我有没有搞错。
我正在尝试进行查询-https://GRAPH.microsoft.com/v1.0/users/user.name@contoso.com/messages?$select=from,to recipients,ccRecipients,bccRecipients on GRAPH Explorer-https://developer.microsoft.com/en-us/GRAPH/grap
我已经尝试了几乎所有关于它的其他帖子,没有任何一个与我的问题相关。
此url<code>http://localhost:8070/produits与Postman一起工作很好。它返回以下内容: 添加Spring Security性后,此url返回403访问被拒绝,即使用户名和密码正确。 安全配置.java 宁静的服务
出现意外错误(类型=禁止,状态=403)。访问被拒绝。当我试图从邮递员或浏览器中访问URL时,我收到了一个错误,即出现了一个意外错误(类型=禁止,状态=403)。访问被拒绝。 1) 网络安全类:- 2) 身份验证筛选器类:- 3)控制器类:- 4) 服务实现类:-