2017-05-08 6 views
0

私はプロジェクト春のブートプロジェクトを作成し、ここに示すようにRESTfulなサービスを実施しているとのメッセージなし利用できる」エラー:春ブーツ、JAX-RSとangularJS

@CrossOrigin 
@RestController 
@RequestMapping("/Users") 
public class UsersRestController { 

@RequestMapping(value="/AddUser") 
public Users addUsers(Users user){ 
    return UM.saveT(user); 
} 
} 

AngularJS方法:

Var url ="localhost:8080/App/Users"; 

$scope.saveUsers = function() { 
$http.post(url+"/AddUser?name="+$scope.NameUser+"&email="+$scope.emailUser) 
     .success(function(data) { 
       $scope.ListUsers = data; 
       $window.location.href="localhost:8080/App/AllUsers"; 
       }).error(function(err, data) { 
       $scope.messag = "Add user error !!"; 
       }); 
} 

前ユーザーを追加するアクションを実行すると、管理者は自分のアプリケーションにアクセスするために認証する必要があります。 、私は、WebページのJSPフレームワークを使用し

@Configuration 
public class MvcConfig extends WebMvcConfigurerAdapter{ 
@Override 
public void configureDefaultServletHandling(
    DefaultServletHandlerConfigurer configurer) { 
     configurer.enable(); 
    } 
} 

ので、私は、JSPページを返すために、コントローラを挑ん:MvcConfig.java級

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(securedEnabled=true) 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ 
@Autowired 
     protected void globalConfig(AuthenticationManagerBuilder auth, DataSource dataSource) throws Exception { 
    //auth.inMemoryAuthentication().withUser("user").password("123").roles("USER"); 
     auth.jdbcAuthentication() 
      .dataSource(dataSource) 
      .usersByUsernameQuery("select username as principal, password as credentials, etat as actived from utilisateurs where username=?") 
      .authoritiesByUsernameQuery("select u.username as principal, ur.nom_role as role from utilisateurs u inner join roles ur on(u.roles_id=ur.id_role) where u.username=?") 
      .rolePrefix("ROLE_"); 
    } 

protected void configure(HttpSecurity http) throws Exception { 

     http 
      .sessionManagement().maximumSessions(100).maxSessionsPreventsLogin(false).expiredUrl("/Login"); 
http 
    .authorizeRequests() 
    .antMatchers("/Users/").access("hasRole('ADMIN')") 
     .antMatchers("/Login").anonymous() 
     .anyRequest().authenticated() 
     .and() 
     .formLogin().loginPage("/Login").permitAll() 
     .defaultSuccessUrl("/") 
     .failureUrl("/Login?error=true") 
     .and() 
     .logout() 
      .invalidateHttpSession(true) 
      .clearAuthentication(true) 
      .logoutUrl("/logout") 
      .permitAll() 
      .logoutSuccessUrl("/Login") 
     .and().exceptionHandling().accessDeniedPage("/403") 
     .and() 
     .csrf(); 
} 

:私は、この設定を行わ

@Controller 
public class WebController { 

    @RequestMapping(value = "/Login") 
    public String login(){ 
    return "login"; 
    } 

    @RequestMapping(value = "/") 
    public String Home(){ 
    return "index"; 
    } 

    @RequestMapping(value = "/Users") 
    public String Users(){ 
    return "indexUsers"; 
    } 

- ユーザー認証後、すべてのユーザーの一覧が表示されますが、新しいユーザーを追加すると、この問題が発生します。

error:"Not Found" message:"No message available" path:"/App/Users/AddUser" status:404 timestamp:1494256474299

ここでは、要求の内容:

Request URL:http://localhost:8080/App/Users/AddUser?name=Michel&[email protected] 

Request Method:POST 

Status Code:404 

Remote Address:[::1]:8080 

Referrer Policy:no-referrer-when-downgrade 

**Request Headers 

Cache-Control:no-cache, no-store, max-age=0, must-revalidate 

Content-Type:application/json;charset=UTF-8 

Date:Mon, 08 May 2017 15:14:34 GMT 

Expires:0 

Pragma:no-cache 

Transfer-Encoding:chunked 

X-Content-Type-Options:nosniff 

X-Frame-Options:DENY 

X-XSS-Protection:1; mode=block 

Accept:application/json, text/plain, */* 

Accept-Encoding:gzip, deflate, br 

Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4 

AlexaToolbar-ALX_NS_PH:AlexaToolbar/alx-4.0.1 

Connection:keep-alive 

Content-Length:0 

Cookie:JSESSIONID=671F3685C71CDEB58726FD1392389FA2 

Host:localhost:8080 

Origin:http://localhost:8080 

Referer:http://localhost:8080/App/Users 

User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 
like Gecko) Chrome/57.0.2987.133 Safari/537.36 

**Query Strings Parameters: 

name=Michel 

[email protected] 

しかし、私は、API残ります(httpください:// localhostを:8080 /ユーザ/は、AddUserを? Name = Michel & [email protected])ユーザーはDBに追加されます。

ここで欠点を見つけるのを手助けできる人は誰ですか?

+0

アンギュラ方法に記載されているURLは 'URL =では "localhost:8080 /アプリケーション/ユーザ"'。あなたがうまくいっていると言ったのは 'http:// localhost:8080/Users/AddUser?名前= Michel&email = michel @ gmail.com'。もしそうなら、角ベースのURLから 'App'を削除してください。 –

+0

基本的なURLはhttp:// localhost:8080/App ** – Michael1

+0

です@Peteさんにお詫び申し上げます。 –

答えて

0

デフォルトではすべてのJax-RSメソッドが使用されます** Get **。次に、メソッドangularjsにメソッドGetを定義する必要があります。

@CrossOrigin 
@RestController 
@RequestMapping("/Users") 
public class UsersRestController { 

@RequestMapping(value="/AddUser") 
public Users addUsers(Users user){ 
    return UM.saveT(user); 
} 
} 

方法 - angularJS:

$scope.saveUsers = function() { 
    $http.get("URL_PATH") 
      .success(function(data) { 

      //Your code here 
       }) 
    }