私のアプリケーションには春のセキュリティが使用されています。ログインに成功した後も、バネは拒否されたページにリダイレクトします。ログインが成功した後、常にスプリングセキュリティがアクセスを拒否されました
は、これは私の設定ファイルである
<security:global-method-security secured-annotations="enabled" pre-post-annotations="enabled"/>
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/" access="permitAll"/>
<security:intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')"/>
<security:form-login default-target-url="/employees"
authentication-failure-url="/" always-use-default-target="true"
authentication-success-handler-ref="UrlAuthenticationSuccessHandler"/>
</security:http>
<beans:bean id="UrlAuthenticationSuccessHandler"
class="com.sowmith.security.UrlAuthenticationSuccessHandler" />
<security:authentication-manager erase-credentials="false">
<security:authentication-provider>
<security:user-service>
<security:user name="sowmith" password="reddy" authorities="hasRole('ROLE_ADMIN')"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
コントローラクラス
@RequestMapping(value="/")
public String welcome(){
return "welcome";
}
@RequestMapping(value = "/employees", method = RequestMethod.GET)
//@PreAuthorize("isAuthenticated()")
public String listEmployee(Model model) {
model.addAttribute("employee", new Employee());
model.addAttribute("listEmployee", employeeService.listEmployee());
model.addAttribute("user", getPrincipal());
return "employee";
}
AuthenticationsuccessHandlerクラス
protected void handle(HttpServletRequest request,HttpServletResponse response,
Authentication authentication) throws IOException{
String targetUrl = determineTargetUrl(authentication);
if(response.isCommitted()){
log.debug("Response has already been committed. Unable to redirect to " + targetUrl);
return;
}
redirectStrategy.sendRedirect(request, response, targetUrl);
}
protected String determineTargetUrl(Authentication authentication){
boolean permitAll = false;
boolean isAdmin = false;
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
for(GrantedAuthority grantedAuthority : authorities){
if (grantedAuthority.getAuthority().equals("permitAll")) {
permitAll = true;
} else if (grantedAuthority.getAuthority().equals("hasRole('ROLE_ADMIN')")) {
isAdmin = true;
}
}
if (permitAll){
return "/";
} else if (isAdmin) {
return "/employees";
} else {
throw new IllegalStateException();
}
では、ターゲットURLの方法を決定し、それは役割のためにチェックしにリダイレクトされますターゲットURL。コントローラには当たらない。
にごAuthenticationSuccessHandlerクラスの役割を確認するの状態があなたのUrlAuthenticationSuccessHandlerクラス –