J'ai développé une appli qui utilise Tomcat5.5 (paquet .deb) comme server web. Pour la mettre en production (1ère fois que je vais utiliser tomcat en prod), j'ai donc configuré le Security Manager. Toutes mes fonctionnalités sont ok sauf une erreur: j'ai une exception après un redémarrage de tomcat. Elle est du à la première compilation des pages JSP qui utilisent la JSTL et donc des tags custom (je pense que ca peut être l'erreur mais je ne suis pas sur). Et à partir du second accès à une page elle ne réapparait plus (sauf si je redémarre le server, bien sur).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
org.apache.jasper.JasperException: access denied (java.lang.RuntimePermission accessClassInPackage.org.apache.coyote)
....
J'ai donc ajouté ceci au fichier /etc/tomcat5.5/policy.d/04webapps.policy dans la section grant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime";
permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime.*" ;
permission java.lang.RuntimePermission "defineClassInPackage.org.apache.jasper.runtime";
permission java.lang.RuntimePermission "defineClassInPackage.org.apache.jasper.runtime.*" ;
mon répertoire de compilation à toutes les permissions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
grant codeBase "file:/my/webapps/directory/WEB-INF/work/-" {
        permission java.security.AllPermission;
};
Les permissions sont alouées pour toutes les librairies que j'utilise ainsi que le répertoire de binaire (WEB-INF/classes).
Mais rien n'y fait. Apparement cette erreur est récurente (j'ai lu ca dans un forum) et ni google ni les forums m'ont donné une solution.
Si comme moi tu as eu ce problème et que tu as trouvé une solution, alors tu es mon sauveur.

Ma config:
Ubuntu Hardy
tomcat5.5 (des dépots)
tomcat5.5-admin
jvm de chez sun: /usr/lib/jvm/java-6-sun
L'appli en soi utilise spring-mvc, ibatis, etc. (je ne pense pas que ca ait d'impact)

Voici l'exception complète:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
org.apache.jasper.JasperException: access denied (java.lang.RuntimePermission accessClassInPackage.org.apache.coyote)
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
    java.security.AccessController.doPrivileged(Native Method)
    java.security.AccessController.doPrivileged(Native Method)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:142)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:239)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1142)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:879)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
    java.security.AccessController.doPrivileged(Native Method)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:218)
 
cause mère
 
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.org.apache.coyote)
    java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    java.security.AccessController.checkPermission(AccessController.java:546)
    java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    java.lang.SecurityManager.checkPackageAccess(SecurityManager.java:1512)
    sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:298)
    java.lang.ClassLoader.loadClass(ClassLoader.java:300)
    java.lang.ClassLoader.loadClass(ClassLoader.java:300)
    java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    org.apache.coyote.http11.InternalOutputBuffer.sendStatus(InternalOutputBuffer.java:452)
    org.apache.coyote.http11.Http11Processor.prepareResponse(Http11Processor.java:1617)
    org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:967)
    org.apache.coyote.Response.action(Response.java:181)
    org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:576)
    org.apache.coyote.Response.doWrite(Response.java:560)
    org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
    org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:323)
    org.apache.tomcat.util.buf.IntermediateOutputStream.write(C2BConverter.java:236)
    sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
    sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:263)
    sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
    java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
    org.apache.tomcat.util.buf.WriteConvertor.write(C2BConverter.java:190)
    org.apache.tomcat.util.buf.C2BConverter.convert(C2BConverter.java:81)
    org.apache.catalina.connector.OutputBuffer.realWriteChars(OutputBuffer.java:535)
    org.apache.tomcat.util.buf.CharChunk.append(CharChunk.java:255)
    org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:456)
    org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:143)
    org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:119)
    org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:326)
    org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:342)
    org.apache.jasper.runtime.JspWriterImpl.print(JspWriterImpl.java:468)
    com.avocats.ui.tag.GoToTag.doTag(GoToTag.java:247)
    org.apache.jsp.WEB_002dINF.views.public_.home_jsp._jspx_meth_av_005ffurl_005f3(home_jsp.java:715)
    org.apache.jsp.WEB_002dINF.views.public_.home_jsp._jspx_meth_c_005fif_005f3(home_jsp.java:617)
    org.apache.jsp.WEB_002dINF.views.public_.home_jsp._jspService(home_jsp.java:236)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
    java.security.AccessController.doPrivileged(Native Method)
    java.security.AccessController.doPrivileged(Native Method)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:142)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:239)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1142)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:879)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
    java.security.AccessController.doPrivileged(Native Method)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:218)
Peut-être que ca n'a rien à voir mais dans le fichier /etc/default/tomcat5.5 il y a la variable JSP_COMPILER=jikes. J'ai testé avec JSP_COMPILER=jikes et JSP_COMPILER=jasper mais ca ne change rien

Merci d'avance