私はpreAuthorizeを使用してURLを保護しようとしています。コースに登録されている人だけがコースにアクセスできます。ここに私のコードは次のとおりです。@PreAuthorizeはコントローラで動作していません
コントローラー:
@Controller
@RequestMapping(value = "/course/{courseId}")
@PreAuthorize("@userService.isCurrentUserinCourse(authentication, courseId)")
public class SyllabusController {
@RequestMapping(value = { "/syllabus" }, method = RequestMethod.GET)
public ModelAndView syllabusPage(@PathVariable("courseId") int courseId) {
...}
UserServiceImpl:
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public boolean isUserinCourse(int userId, int courseId) {
return userDAO.isUserinCourse(userId, courseId);
}
@Override
public boolean isCurrentUserinCourse(Authentication authentication, int courseId) {
if (!(authentication instanceof AnonymousAuthenticationToken)) {
return isUserinCourse(((UserModel) authentication.getPrincipal()).getId(), courseId);
}
return false;
}
春-のsecurity.xml:
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<global-method-security pre-post-annotations="enabled" />
<!-- enable use-expressions -->
<http auto-config="true" use-expressions="true">
と私たちは私が/講座/ {IDに行きます} /シラバスログインなしでは、それはすべきではないページを表示します。また、デバッグはUserServiceImplのisCurrentUserinCourse(認証認証、int courseId)メソッドには含まれません。あなたは、静的メソッドに
SecurityContextHolder.getContext().getAuthentication()
とcourseId
あなたが#coureseId
に変更する必要があり、あなたが方法ではなく、クラスにこれを移動する必要があるので、あなたのことが可能に従うことによって、認証を取得することができます
への変更(ないt彼は現在のバージョンですが、まだ適用されます) –
も参照してくださいhttp://stackoverflow.com/questions/32156407/preauthorize-is-not-working-what-could-be-the-problems?rq=1 –