5847927828
621
2020-02-01 01:51:50
4
269

@Preauthorize 가 동작하지 않습니다


왜 동작이 안되는건가요 .. ㅜ ㅜ

<!-- servlet-context.xml -->
<security:global-method-security pre-post-annotations="enabled" />


	@PreAuthorize("isAuthenticated()")
	public void asd() {
		System.out.println("okokok");
	}
	
	@RequestMapping(value="/" , method=RequestMethod.GET)
	public String index() {
		asd();
		return "/index";
	}
	

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="http://www.springframework.org/schema/security"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security.xsd">

	
	 
	<bean id="SuccessHandler" class="com.mycompany.myapp.LoginHandler.SuccessHandler" >
	             <constructor-arg value="/" />
	</bean>

	        <sec:http pattern="/**/*.js" security="none" />
		<sec:http pattern="/**/*.css" security="none" />
			
        <sec:http auto-config='true' use-expressions="true">
    	         <sec:intercept-url pattern="/" access="permitAll" />  
       		 <sec:intercept-url pattern="/home" access="permitAll" />
       		 <sec:intercept-url pattern="/login" access="isAnonymous()" />
       		 <sec:intercept-url pattern="/signup" access="isAnonymous()" />
       		 
       		 <sec:intercept-url pattern="/product/*" access="permitAll" />
       		 <sec:intercept-url pattern="/**" access="isAuthenticated()" />
   
        <sec:form-login login-page="/login"
                        login-processing-url="/user/login"
                       	authentication-success-handler-ref="SuccessHandler"
                        username-parameter="email" 
                        password-parameter="password"
                        authentication-failure-url="/login?redirect=error"
                        always-use-default-target='true' />
        <sec:logout invalidate-session="true"
                    logout-url="/logout" 
                  	logout-success-url="/"
                     />
        <!-- enable csrf protection -->
        <sec:csrf/>
    </sec:http>
    <sec:authentication-manager>
        <sec:authentication-provider>
             <sec:jdbc-user-service data-source-ref="dataSource"
                users-by-username-query="SELECT email, password, enabled FROM user WHERE email = ?"
                authorities-by-username-query="SELECT email, authority FROM shop_authorities WHERE email = ?" />
       </sec:authentication-provider>
    </sec:authentication-manager>
    
</beans>

0
  • 답변 4

  • 사자카로스
    1k
    2020-02-01 03:12:29

    메소드 바로 호출하면 스프링이 어노테이션을 인지 못합니다.

    asd()를 bean 객체로 만들어서 호출해보세요.

  • 5847927828
    621
    2020-02-01 03:48:23
    @sajacaros

    답변 감사합니다!
    근데 @Requetmapping 메소드에
    preauthorize 어노테이션 달아주는것도

    말씀해주신대로 해야되는건가요??
    사실 지금 requestmapping 메소드에 
    필요한거고 위에 쓴거는 테스트용이라..
  • 5847927828
    621
    2020-02-01 03:50:18
    @sajacaros

    답변 감사합니다!
    근데 @Requetmapping 메소드에
    preauthorize 어노테이션 달아주는것도

    말씀해주신대로 해야되는건가요??
    사실 지금 requestmapping 메소드에 
    필요한거고 위에 쓴거는 테스트용이라..
    제가지금 구현하고싶은건
    글쓴이만 글 수정 /삭제 url에 접근할 
    수 있도록 하는거거든요...
  • John Suhr
    3k
    2020-02-01 08:12:21

    컨트롤러를 빈으로 가지는 컨텍스트가 프록시를 지원하도록 하셔야 합니다 루트에 스캔하시면 루트 컨텍스트에, 서블릿에서 스캔하면 서블릿 컨텍스트에 autoproxy 태그가 있나 확인해보세요

  • 로그인을 하시면 답변을 등록할 수 있습니다.